开发unity多平台的方法
使用软链接的方式在多个项目中复用Assets
ln -s SourceAssets DestAssets
unity使用软链接快速切换平台
我们的项目文件全部存放在Assets文件夹中,其中包含了我们整个项目运行所需的全部资产,如模型、贴图、材质、声音、视频等等,这些资产在导入时会生成对应的.meta文件,这些文件保存了资产之间的引用关系信息。
在Assets中所有资产在导入过程中,都经历了筛选和创建,会形成与之对应的设置,所有的设置都存放在ProjectSettings文件夹中。
如果使用Unity2018版本,我们项目中所有引用的包信息都存放在Packages文件夹中。
Library文件夹是Unity根据项目自动生成的,当我们的资源导入到Unity时,这些资源并没有被改变,而是根据我们的设置生成平台可以运行且处理后的文件放置到Library文件夹中,当我们的平台发生变化时,Library中的文件会根据变化重新编译生成与之相应的内容。
obj文件夹存放了Unity的部分缓存信息。
根据以上部分,当我们需要切换平台时,其改变的内容主要存在于Library文件夹中,我们可以根据不同的平台复制多个工程,在打包时把Assets、Packages和ProjectSettings文件夹放入其他平台的文件夹中进行编译即可。
把assets和package两个文件夹使用软链接,项目配置主要位于project settings目录。建立两个项目。unity设计的多平台方案切换起来过于耗时。
webgl编译产物部署
在Player Settings/Publish Settings可以设置压缩方式。默认使用brotli。
Brotli 是 google 开发的压缩算法,比起gzip可能会有高达37%的提升。目前主流浏览器都支持br算法。使用算法的前提是启用了 https,因为 http 请求中 request header 里的 Accept-Encoding: gzip, deflate 是没有 br 的。
使用brotli比较复杂,一是服务器需要进行相应配置;二是只能使用https。所以尝试使用gzip。
但是gzip的使用也建议不要在unity里面进行,而是让unity生成原始文件,然后在nginx里面配置静态资源的压缩,这种方式更为彻底,可以说是webgl部署的最佳实践。
location {{locationName}}/ {
# access_log /var/log/nginx/{{name}}.log;
# 如果有公共目录,那么设置公共目录
alias {{directory}} ; #如果是root需要带着最后一个pathName
index index.html Index.html ;
gzip on;
gzip_static on;
gzip_min_length 1k;
gzip_comp_level 5;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png application/json image/svg+xml application/octet-stream;
}