PerfOptimization.md 2.8 KB
Newer Older
O
migrate  
oceanxiao 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13

# 性能优化总览

## 一、为何需要进行性能优化?

Unity WebGL导出形式相对于原生APP应用,需要开发者更关注性能与体验调优。有以下几点原因:
1. 小游戏天生为"即开即用",在小游戏生态下玩家对启动耗时更敏感。
2. Unity WebGL底层基于WebAssembly,算力不及原生APP。
3. Unity并未对WebGL平台做特别裁剪,启动较慢。

因此,相对于原生APP,无论从启动还是运行上我们都需要做进一步性能优化。

## 二、优化目标
O
oceanxiao 已提交
14
根据平台在不同游戏类型/机型下的评测,我们给出Unity WebGL小游戏可以参照的的[性能评估标准](PerfMeasure.md),开发者依此对游戏的启动与运行性能进行调优。
O
migrate  
oceanxiao 已提交
15 16 17 18

## 三、最佳实践
### 3.1 加快游戏启动速度
* 编译选项中仅勾选首场景
L
liangyizhou(周良宜) 已提交
19
* CDN必须开启Brotli或gzip压缩
O
migrate  
oceanxiao 已提交
20 21 22 23 24 25 26 27 28
* 精简首场景物件,尽快渲染让玩家看到游戏首画面
* 减少初始化与首帧逻辑,首场景Awake/Start/首次Update不要包含过重逻辑
* 减少代码包体, 剔除不必要的插件
* 使用代码分包工具缩减WebAssembly首次下载包体


更多信息请参考:
  * [提升Unity WebGL游戏启动速度](StartupOptimization.md)
  * [首场景启动优化](FirstSceneOptimization.md)
ocean2o11's avatar
ocean2o11 已提交
29
  * [使用代码分包工具](WasmSplit.md)
O
migrate  
oceanxiao 已提交
30 31 32 33 34 35 36 37 38
 
### 3.2 资源按需加载
* 尽量避免在各级Resource包含资源,该目录将被直接打包在首资源包
* 使用AssetsBundle/Addressable进行资源加载
* 单个包体最好不超过2MB
* 资源请求并发数不超过20个

更多信息请阅读:
*  [使用Addressable进行资源按需加载](UsingAddressable.md)
ocean2o11's avatar
ocean2o11 已提交
39 40
*  [使用 AssetBundle 进行资源按需加载](UsingAssetBundle.md)
*  [使用预下载功能](UsingPreload.md)
O
migrate  
oceanxiao 已提交
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69

### 3.3 资源处理建议
* 贴图maxsize尽量不超过1024,小游戏环境适当降低画质
* 贴图尽量不生成Mipmap
* 贴图尽量不使用可写属性
* 字体文件压缩前最大不超过4MB
  
更多信息请阅读:
*  [资源优化工具与建议](AssetOptimization.md)

 
### 3.4 降低小游戏内存使用
* 不要初始化所有未使用的资源
* 释放不使用的资源
* 发布前使用压缩纹理工具进行优化
* 使用微信音频接口对Unity音频进行改造优化
  
更多信息请阅读:
*  [压缩纹理优化](CompressedTexture.md)
*  [Unity WebGL内存原理详解](https://gameinstitute.qq.com/community/detail/112321)
*  [音频适配优化](AudioOptimization.md)

### 3.5 降低计算复杂度
* 尽量使用Android CPU Profiler在小游戏真机环境Profie计算瓶颈
* 提前在Unity环境使用Unity Profiler发现问题
* 物理计算较重的游戏使用Fixed Timestep控制计算频率

更多信息请阅读:
* [使用Android CPU Profiler性能调优](AndroidProfile.md)
L
liangyizhou(周良宜) 已提交
70
* [使用Unity Profiler性能调优](UnityProfiler.md)