unity性能优化小结

1.人物身上少挂载组件,用一个组件触发其余类执行会更好。缓存

好比,建立人物移动的类,这个类不继承mono,而后用一我的物的组件(统管整我的物的组件)的update触发去触发人物移动的类的update。这样人物移动也能够作相应行为。这样能够减小人物挂载的组件。多线程

2.少用projector的方式作投影显示。由于每一个projector都会有个相机,这样会产生不少gc。没法合并dc。用面片(quad)而后用rvocontroller可让他贴在地面上。函数

3.getcomponent,GetChild,find等获取性能千万不要在update或循环中作。会产生大量gc。性能

4.string不能直接用+来拼接,用string.format来实现字体

5.一些方法要常常获取就应该统一一个地方,一次性获取。减小后面获取的数量优化

6.字典的key不能用枚举,会有gcui

7.当有没用到的widget时就应该要隐藏他,否则uipanel的update会消耗比较高。spa

8.全部设置能跟随qualitysettings走的话就跟随qualitysettings走,这样能够一并设置显示质量线程

9.不在主场景就把主场景的摄像机给关了,不在相关的页面则隐藏相关的页面3d

10.切换界面时而且是全屏界面时,不在当前界面的里面的uirect和camera组件都隐藏,由于可能有特效之类

11.显示不出来的shader中的pass(由于在ui上若是不写深度的话一些pass会在ui后面)就不要渲染,能够关闭该pass减小dc

12.rendertexture能用低质量的就用低质量的,好比用ARGB4444能显示正常的就不用全质量,能降采样的就降采样,由于rt通常比较可能用在摄像机的targetrendertexture里,因此自己的rt越小性能越好。并且若是之渲染纯色的话能够把rt的深度给关了

好比我只想碟一个描边过来则能够只显示纯黑色。

13.相似这样的挂载会在人物第一次加载的时候同时去加载特效fx_p_p2_aoyi_bg等。这样会致使loading.readobject的卡顿。

解决办法是改成动态加载特效,而且在bundle上改成每一个人物的特效为一个bundle。单独加载,而后在加载完人物的时候隔帧加载特效,减小卡顿。

14.不须要投射阴影或接收阴影的而且场景有关照就要关闭相关设置(由于有些比较偏的物品确实不必有阴影)

15.把放在片元着色器执行的代码放到定点着色器

16.update中的执行逻辑尽可能简单,就算有复杂的状况也应该把复杂的状况缓存起来。

获取name会有gc,缓存该缓存的东西,depth同样就不去设置

这样才能0个gc

17.有一个规范的问题,没用的代码必定要移除,否则会有隐患,好比会产生gc,像下面这段的中间那句话就是没用到的,单产生了gc

18.ngui的话层级depth若是是同一个图集的话要设置成同样的数值,而且在项目开始时就要规划好哪一个图集用在哪些区间。好比LTCombatHud_Atlas是1到50,人物血条是-300到-400,label字体是490到600

19.不是由于动静分离的话,panel尽可能只用一个,由于不一样的panel一样的图集一样的深度也是会截断的,就会产生截断的多余的dc。

20.开启多线程渲染

21.一样类型的物品若是只是颜色不同的话就用一个白色贴图而后改颜色就能够了,原来是这样的,修改过是。这样能够合批。

22.System.IO.Path.GetFileNameWithoutExtension会有比较高的消耗,尽可能不要用,好比若是要判断能够用IndexOf等尽可能代替(固然也许不合理)也能够本身写一个方法代替。

23.尽可能用对象池,而且对象池的原则是若是对象池没有则建立一个对象,用完放到对象池并隐藏,须要的时候再拿出来。若是须要使用多个则查看当前的特效是否隐藏,隐藏就拿出来用,若是是显示的则再建立一个,而后放到对象池。而后用lru的方式并控制对象池的上限。

24.shader尽可能剔除背面

25.特效总时长要跟真实的特效播放时长一致,否则原本只须要建立一个特效的,由于还在显示则对象池就去建立了多个特效。

26.一些比较经常使用的特效就不要清除了,缓存起来,好比人物出场的特效,用空间换时间。

27.在一些场景若是前一个场景不能移除则应该要隐藏起来,而且相应的逻辑上的update也要return掉

28.字符串比较不用直接用==,会产生装箱而致使有gc。用compareto或者indexof

29.逻辑判断上,若是已经闯关的而又不须要建立人物的则应该把建立人物那块给退出。

 

 

 

个人优化方法:

  1. 先在pc上用profile,找耗时的函数,最好找到对象。而后根据执行的代码优化内容。
  2. 特效的优化就是优先加载好再执行,用对象池包装起来。
  3. 尽可能再该界面不会有其余界面的内容再执行,好比不会有主场景的内容再执行
  4. 尽可能分帧执行或分帧加载内容,均到每帧来作
  5. Ui的dc尽可能减小
  6. Mesh能静态的就作静态的
  7. 材质尽可能共用,才能合批
  8. 多线程渲染的开关
  9. 。。。

若有更好的方式欢迎留言告知,谢谢!!