项目配置优化
1. 降低或禁用加速度计频率
1
| Editor->Player->Accelerometer Frequency is disabled
|
2. 禁用不必要的player和Quality 设置
1
2
| a. disable Auto Graphics API
b. Disable Target Architectures
|
3. 禁用不需要的物理
1
| 如果没有物理可以关闭检查 Auto Simulation 和 Auto Sync Transforms.
|
4. 设置合理的帧率
1
| Application.targetFrameRate = 30;
|
5. 优化层次结构
1
2
3
| 如果场景中含有大量NPC移动物体:
1.将NPC生成在场景的根级别,而不是作为其他对象的子对象。这样一来,NPC移动时只需通知其父级对象,而不需要通知其他对象。
2.将NPC的能力对象(NPC Ability Game Objects)移动到NPC的根级别,而不是作为NavAgent的子对象。这样可以减少需要通知的对象数量。
|
6. 避免重复转换
1
2
3
| Transform.SetPositionAndRotation
GameObject.Instantiate(prefab, parent);
GameObject.Instantiate(prefab, parent, position, rotation);
|
资源优化
1. 正确导入纹理
1
2
3
4
5
| - 降低最大尺寸
- 使用两次幂
- 使用 Unity Sprite Atlas
- 关闭“已启用读/写”选项
- 禁用不必要的 Mip 映射
|
2. 压缩纹理
调整网格导入设置
图形和 GPU 优化
批处理绘制调用
1
2
3
4
| - 动态批处理
- 静态批处理
- GPU 实例化
- SRP 批处理
|
使用帧调试器
1
| Frame Debug ## 避免过多的动态灯光
|
禁用阴影
将光照贴图烘焙到光照贴图中
使用光照图层
使用光照探针移动物体
1
| 光照探针使用球谐波,与动态光相比,球谐波的计算速度非常快
|
使用详细级别 (LOD)
使用遮挡剔除移除隐藏对象
## 降低移动原生分辨率 Screen.SetResolution(width, height, false)
## 限制使用相机
## 保持着色器简单
## 最大限度地减少过度绘制和 alpha 混合
## 限制后期处理效果
## 小心使用 Renderer.material 在脚本中访问 Renderer.material 会复制材质并返回对新副本的引用。这将中断已包含该材料的任何现有批次。如果要访问批处理对象的材质,请改用 Renderer.sharedMaterial。
## 优化 SkinnedMeshRenderer 渲染蒙皮网格的成本很高。确保每个使用 SkinnedMeshRenderer 的对象都需要它。如果游戏对象在某些时候只需要动画,请使用 BakeMesh 函数将蒙皮网格冻结为静态姿势,然后在运行时切换到更简单的 MeshRenderer。
## 最小化反射探头
[官方文档]