渲染模块
降低DrawDall
通过批渲染来达来降低DC。-
简化资源
- 模型面数,数量
- 纹理数量
- 纹理尺寸
- 纹理格式
选择硬件支持的纹理格式不仅可以减小内存空间,同时也能减少加载时间。对于安卓来说:ETC > RGB16bit > RGB32bit
https://blog.uwa4d.com/archives/LoadingPerformance_Texture.html
LOD
距相机较远时,使用低模渲染。Occlusion Culing
剔除视域内,但被其它遮挡住的物体,避免对这部分物体进行渲染。Culling Distance
可以针对不同层,设置不同的Culling Distance。
UI模块
- NGUI.LateUpdate
尽可能将动态UI元素和静态UI元素分离到不同的UIPanel中(UI的重建以UIPanel为单位),从而尽可能将因为变动的UI元素引起的重构控制在较小的范围内;
尽可能让动态UI元素按照同步性进行划分,即运动频率不同的UI元素尽可能分离放在不同的UIPanel中;
控制同一个UIPanel中动态UI元素的数量,数量越多,所创建的Mesh越大,从而使得重构的开销显著增加。比如,战斗过程中的HUD运动血条可能会出现较多,此时,建议研发团队将运动血条分离成不同的UIPanel,每组UIPanel下5~10个动态UI为宜。这种做法,其本质是从概率上尽可能降低单帧中UIPanel的重建开销。
加载模块
主要集中在场景切换时,要卸载旧场景还要加载新场景。
-
场景卸载
Destroy
除了卸载那些没有标识“DontDestroyOnLoad”的资源外,还要调用所有Mono脚本中的OnDestroy方法。这部分消耗主要由OnDestroy中的代码决定。Resources.UnloadUnusedAssets
以非Addtively方式切换场景时,引擎会自动调用此接口;同时在场景加载完成后,用户也会手动调用此接口。消耗主要取决于场景中的资源数量。
-
场景加载
资源加载
加载效率主要由加载方式,加载量,资源格式(贴图,网格,材质等)等决定。Instantiate实例化
一方面,实例化的最大消耗在于依赖资源的加载,预加载可以解决;另一方面,脚本序列化消耗也不少,特别是有很多被SerializedField标识的变量。
代码效率
80%的性能开销都集中在20%的函数上。