纳金网
标题: Unity3D 性能优化的几个方法 [打印本页]
作者: 烟雨 时间: 2015-9-27 01:33
标题: Unity3D 性能优化的几个方法
一丶优化
1)、定时重复处理用InvokeRepeating 函数实现
例如: void Start()
{
InvokeRepeating ("DoSomeThing", 0.5f , 1.0f); //启动0.5秒后每隔1秒执行一次 DoSomeThing 函数;
}
2)、尽量避免每帧处理
例如: void Update()
{
DoSomeThing();
}
改为: void Update()
{
if(Time.frameCount%5 == 0) //每帧处理改为每5帧处理一次;
{
DoSomeThing();
}
}
3)、优化 Update, FixedUpdate, LateUpdate 等每帧处理的函数
例如: void Update()
{
Vector3 pos = transform.position;
}
改为: private Vector3 pos;
void Update()
{
pos = transform.position;
}
4)、主动垃圾回收
//给某个对象GameObject绑上以下代码;
例如: void Update()
{
if(Time.frameCount%50==0)
{
System.GC.Collect();
}
}
5)、运行时尽量减少 Tris 和 Draw Calls
例如: 预览的时候 , 点开Stats , 查看图形渲染的开销情况 ; 特别注意 Tris 和 Draw Calls 这两个参数。
一般来说 , 要做到 :
Tris 保持在 7.5 K 以下
Draw Calls 保持在 20 以下
6)、压缩 Mesh
例如: 导入 3D 模型后,在不影响显示效果的前提下,最好打开 Mesh Compression;
Off,Low,Medium,High 这几个选项,可酌情选取。
7)、避免大量使用 Unity 自带的 Sphere 等内建 Mesh
例如: Unity 内建的Mesh,多边形的数量比较大,如果物体不要求特别圆滑,导入其他的简单3D模型代替。
8)、优化数学计算
例如: 如果可以避免使用浮点型(float),尽量使用整形(int),尽量少用复杂的数学函数比如 Sin 和 Cos 等等。
9)、减少固定增量时间
例如: 将固定增量时间值设定在0.04-0.067区间(即,每秒15-25帧); 你可以通过 Edit --> Project Settings --> Time 来改变这个值 。
这样做可以降低 FixedUpdate 函数被调用的频率以及物理引擎执行碰撞检测与刚体更新的频率;假如你使用了较低的固定增量时间
并且在主角身上使用刚体部件,那么你可以启用插值办法来平滑刚体组件。
10)、减少 GetComponet 的调用
例如: 使用 GetComponet 或者内置组件访问器会产生明显的开销;你可以通过一次获取组件的引用避免开销,并将该引用分配给一个
变量(有时称为"缓存"的引用)。如:
void Update()
{
transform.Translate(0,1,0);
}
改为:
private Transform myTransform;
void Awake()
{
myTransform = transform;
} void Update()
{
myTransform .Translate(0,1,0);
}
例如: 你应该避免分配新的对象,除非你真的需要,因为对象不在使用时,会增加垃圾回收系统的开销;你可以经常重复使用数组和其他对象,而不是分配新的数组 或对象;这样做好处是尽量减少垃圾的回收工作;同时,在某些可能的情况下,你也可以使用结构(struct)来代替类(class);这是因为,结构变量主要存
放在栈区而非堆区;因为栈的分配较快,并且不调用垃圾回收操作,所以当结构变量比较小时可以提升程序的运行性能;但是当结构体较大时,虽然它仍可避
免分配/回收的开销,而它由于"传值"操作也会导致单独的开销,实际上它可能比等效对象类的效率还要低。
欢迎光临 纳金网 (http://go.narkii.com/club/) |
Powered by Discuz! X2.5 |