【unity优化六】代码

¥尽量避免每帧处理

   1)方案一:每隔几帧处理一次

      function Update() { if(Time.frameCount % 5 == 0) { DoSomeThing(); } }

   2)方案二:定时重复处理用InvokeRepeating 函数实现

      function Start() { InvokeRepeating("DoSomeThing", 0.5, 1.0); }

¥优化 Update,FixedUpdate, LateUpdate 等每帧处理的函数,函数里面的变量尽量在头部声明

private var pos: Vector3; function Update(){ pos = transform.position; }

¥可用变量缓存游戏对象或组件,避免频繁的FindGameObject()和GetComponent()

¥主动回收垃圾 function Update() { if(Time.frameCount % 50 == 0) { System.GC.Collect(); } }

¥循环语句中,可先保存最大值

   length=myArray.Length;    for(int i=0;i<length;i++)  { }

¥少用foreach,因为每次foreach为产生一个enumerator(约16B的内存分配),尽量改为for.

¥将GameObject上不必要的脚本disable掉,避免每帧做update()操作

¥删除空的Update方法

¥Lambda表达式,使用不当会产生内存泄漏

¥尽量少用LINQ:1.部分功能无法在某些平台使用,2.会分配大量GC Allow.

¥控制StartCoroutine的次数:开启一个Coroutine(协程),至少分配37B的内存。Coroutine类的实例21B,Enumerator -- 16B

¥使用StringBuilder替代字符串直接连接.

¥缓存组件:每次GetComponent均会分配一定的GC Allow;每次Object.name都会分配39B的堆内存.

¥尽量使用固定的内置数组:内置数组是非常快的。ArrayList或Array类很容易使用,但速度不行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值