众所周知,Unity3d 的性能优化是一个非常复杂的话题,根据不同的分类标准,可以分为不同的项目,根据以往参考别人的看法,本文将其归纳为为三大类:
CPU
DrawCall
提起优化,就不得不提DrawCall,DrawCall 可以归纳为cpu向gpu的一次调用。
Batching:
Static Batching
Dynamic Batching
将图片打包成图集:
GC
gc的调用时机,当堆内存不足是调用,或者自己调用
GPU
occlusion:
减少顶点的数目:
优化模型:
减少片元的数目:
内存:
程序方面:
01,务必删除脚本中为空或不需要的默认方法。
查阅过一些资料,也曾向一位大牛问过,但是说实话,没找到让我信服答案,不过这条准则肯定是没毛病的。
02,只在一个脚本中使用OnGUI方法。
你就当这是废话吧!
03,避免在OnGUI中对变量,方法进行更新,赋值。输入变量建议在upadate中进行。
通过脚本测试发现,OnGUI的调用频率为update的2倍,通过查阅其它相关资料发现,有人说是至少两倍 (未验证)
04,不要频繁的去获取组件,如果需要,最好声明未变量。
其实这里指的就应该是getcomponent, 客观的讲,我并没有进行相关的测试,从网上得到的结果是: Getcompont 有三个重载的版本,getcompont<T> () getComponet(System.type type); getComponet(string str); 并且它们三个的效率是依次递减的,另外最后一个还涉及的C#的反射机制,故效率可以说是低的可 以。不行你试试,反正我暂时是懒得验证了!
05,尽量使用整型数字,因为IPhone的浮点数计算能力很差
后半句,我不确定,我从来都不屑于用Iphone, 没错,你猜的很对,太穷了,根本就买不起啊
06, 尽量少的进行实例化(instantiate)对象,对于确实需要频繁重新生成的物体,可以使用对象池。
这个我是深有体会,确实应该如此!记住就行,优化必备