unity性能优化之程序优化方面

(1)程序整体优化方面

  A:我们要删除脚本中为空或者不需要的默认方法,尽量少在Update里面做事情,脚本不用时把它禁用掉(Deactive)

  B:尽量不使用原生态的GUI方法,而是使用UGUI或者NGUI来代替

  C:尽量的隐藏/显示或者实例化来回的切换对象,尽量少用SetActiveRecursively或Active,而是改为将对象移除相机范围和移回原位的做法,也可以选择使用脚本的方式开启与关闭游戏对象的“Mesh Renderer”组件来进行优化

  D:不要频繁的获取组件,将其声明为全局变量

  E:脚本不使用时禁用它,需要时再开启

  F:尽量直接声明脚本变量,而不使用GetComponent来获取脚本

  G:尽量少的使用Update、LateUpdate、FixedUpdate等每帧都处理的函数

  H:使用C#中的委托与事件机制,比使用SendMessage机制效率更高

(2)事件函数方面

  A:按照脚本生命周期的原理,对于“协程”与“调用函数”,一般在脚本禁用的时候,“协程”与调用函数,不会自动调用,需要使用脚本写明标识禁用,否者会出现空转现象,耗费资源

  B:同一脚本中频繁使用的变量与脚本之间频繁调用的变量或方法,建议声明为全局的

  C:尽量避免每帧处理,可以每隔几帧处理一次。

  D:可以使用协同或者调用函数来代替不必每帧都执行的方法

  E:避免在Update或者FixedUpdate中使用搜索方法

(3)数学计算方面

  尽量使用int类型来代替float类型,尽量少用复杂的数学函数,改除法为乘法,尽量少用模运算和除法运算

(4)垃圾回收机制

  A:尽量主动回收垃圾

  B:垃圾回收的时机:尽量放在游戏场景的加载和场景结束的时候主动卸载资,在战斗中不要主动卸载,否者造成非连续性卡顿等

  C:避免频繁分配内存:应该经常重复使用数组合其他对象,不能分配新的数组或对象,采用“游戏对象缓存技术”提高系统效率

  D:在较大场景中,距离摄像机较远的游戏对象可以将GameObject上不必要的脚本禁用(Disable)掉,如果需要开启,则再使用GameObject.setctive()开启等,这样也可以配合事件中的OnBecameInvisible()(当变为不可见)和OnBecameVisible()(当变为可见)使得游戏对象在不可见的时候自动禁用,可见的时候再开启

  E:善于使用OnBecameInvisible()和OnBecameVisible(),控制物体Update()函数的执行减少开销

  F:资源预加载技术的运用。资源预加载技术就是以空间换取时间的方法,正式进入战斗场景前,可以在关卡之间的“战绩统计场景”中进行“预加载”操作(一般常用“协同”进行加载),这样游戏不会出现卡顿等现象

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章