首页 > 手游开发 > Unity3D > Unity开发优化方案:WebGL篇
2022
06-06

Unity开发优化方案:WebGL篇

PART 1

对Unity开发WEBGL印象就是开发方便打包慢输出内容加载慢不支持移动端一堆堆问题.但是最麻烦的还是加载慢真的慢.
所以通过对各种h5开发对比准备放弃Unity发布WEBGL的做法.但是随着unity2020.1发布这个现状稍稍出现点转机…

最近测试了Unity Tinylaya和Unity webgl发现如果优化做的好unity webgl 虽然比不上tiny和laya但是可以把他们之间的差距缩小不少
测试同一款场景冷加载(本地服务器不考虑网络影响):

1.Unity Tiny 1.2秒
2.LAYA 1.69秒
3.未优化的WebGL(Unity2018开发的) 5.5秒
4.优化过的WEBGL(unity2020.1开发) 1.98秒

看到这个数据我燃起了希望准备脱坑脱坑再入坑.

先回答几个小问题介绍:

1.为什么Unity Tiny那么快?
因为unity tiny用DOTS(多线程式数据导向型技术堆栈)开发DOTS=ECS+job System+Burst

实体组件系统(ECS) :因为unity3d各种组件都存在可能你项目不需要那么多组件但是打包是就都给加进去了ecs解决的就是我用什么组件加载什么组件.
任务系统(Job System):unity主要任务都是在主线程运行这个就是让你不知不觉中把unity变成多线程运行
Burst Compiler编译器:unity之前用mono来进行编译实现跨平台后来升级IL2CPP速度有进一步提升还是比不过c++这个这个编译器翻译为大爆炸是使用LLVM从IL/.NET字节码转换为高度优化的本机代码据说已经可以超越c++的速度了.

所以DOTS是未来的方向但是Unity已上市有了钱就放弃梦想了?说好2020年发布正式DOTS这也没消息了.所以现在可以学习但是使用起来就没那么方便了.有兴趣自己研究吧.

2.LAYA为什么也可以那么快?
laya是国产的一款引擎主要就是因为Unity WebGL不作为所以才有了LAYA他使用Asts或者JS开发在浏览器上不用转换脚本了场景可以用Unity的并且也用上了实体组件系统可以控制加载需要的组件这是一款不错的工具主要用来开发各种小游戏.搞了三天开发了一个场景进行与其他对比测试.

3.Unity WebGL为什么那么慢?
1.没有实体组件系统把引擎内的组件一蜂窝打包管你用不用
2.之前编码可能还是用Mono这编译也很慢
3.资源优化不完全加载数据很多还有可能是很多不用的数据.
4.优化后为什么Unity WebGL也可以提升那么大?
1).unity2020.1更改了构建加载器可以根据项目进行组件剥离和代码优化
2).全面使用IL2CPP来编译提升点速度
3).全面使用WebAssembly
4).自己进行各种尽可能的优化来提高加载速度

最后的成品会比之前的WebGL有很大提升

开始进行项目优化
1.下载Unity2020.1和更高的版本用必须高于2020.1的版本开发
1.如果没有必须后台运行的必要就关闭后台运行P->Resolution and Presentation ->Run In BackGround
2.修改一个合适的加载页面(尽量小加载页能让人时间感降低)因为加载的进度条是与数据加载有关与加载到引擎时间可能不对应会感觉进度条不准.
3.如果是专业版去掉splash screen关闭启动画面会有一点点提升
4.Other Settings->Auto Graphics API根据自己需要选择webgl1.0webgl2.0或者都选毕竟还有edge浏览器只支持webgl1.0
5.Other Settings->Lightmap Encoding 选择Low光照贴图选低毕竟webgl了牺牲质量换速度
6.Other Settings->Api Compiler Configuration 选择.Net Standard 2.0
7.Other Settings->Strip Engine Code 勾选上这是剥离引擎代码把Managed stripping level>等级设成高这能尽可能剥离不使用的引擎代码.
8.Other Settings-> Optimize mesh Data勾选上这是优化网格数据
9.Other Settings-> Texture MipMap Stripping 根据自己选择勾选这个是贴图边缘模糊进行抗锯齿
10.Other Settings-> Stack Trace 全部选择None 堆栈跟踪全部不需要.
11.Publishing Settings ->Enable Excptions 选择None启用异常检测发布时间不需要
12.Publishing Settings ->Compression Format 是否压缩跟自己需要选择压缩肯定需要解压如果网络不好选择压缩.压缩尽量选择Gzip兼容好本地加载可以选择不压缩
13.Publishing Settings ->Data Caching 数据缓存这个一定要勾选二次加载提速度能不少.

PART 2

上篇进行了unity本身编辑器方面的更改这篇主要讲讲项目的优化来提高加载速度.
首先学会看打包数据分析在打包完成后打开Console->Open Editor Log

然后会打开数据分析文档

1.尽量使用AssetBundle来加载数据.
2.尽量减少插件使用因为这些插件也会打包进去
3.尽量不使用字体因为webgl显示中文需要中文字体所以字体也会打包如果只是按键需要中文可以用图片来替代.
4.尽量删掉Packages里面不使用的package它会影响 Included DLLs 的大小
6.删除Resource和StreamingAssets他们都会打包进去
7.删除物体身上不需要的组件比如Collider
8.Camera尽量不使用HDR场景尽量是不用阴影Quality->Anti Aliasing 选择2X或者4X就可以了多重采样虽然能抗锯齿但是降低速度
9.图片根据情况使用Mip但是一定选择RGBA Crunched DXT5 格式很大程度减小贴图资源包
10.其他正常的项目优化垃圾回收经验.

最后编辑:
作者:搬运工

留下一个回复

你的email不会被公开。