Unity项目配置建议
有几个特定的项目设置会影响移动端游戏的性能。
降低或禁用Accelerometer Frequency(加速度计频率)
Unity每秒钟会以一定次数统计移动设备的加速度计状态。如果应用并不会用到加速度计,我们完全可以禁用该功能或降低统计频率来获得更好的性能。
请在游戏不使用加速度计时禁用Accelerometer Frequency。
禁用不必要的Player或Quality设置
如果目标平台并不支持Auto Graphics API,最好禁用Player设置中的相应选项,防止驱动程序生成多余的着色器变体。如果应用不支持老式CPU,请禁用Target Architectures 。
禁用Quality设置里多余的质量等级。
禁用不必要的物理模拟
如果游戏并不会用到物理模拟,请取消勾选Auto Simulation和Auto Sync Transforms。这两个选项在物理模拟之外并没有过多的用处,因此只会减缓应用的运行。
选择正确的帧率
移动端项目必须小心在帧率与电池寿命、过热保护间找到平衡。有时与其用60帧挑战设备的极限,用30帧平稳运行是一种更好的选择,Unity默认会将移动端应用的帧率设为30fps。
你也可以在运行时调用Application.targetFrameRate动态地调整帧率,比如,在相对较慢或静止的场景中将帧数降到30帧以下,在游戏进行中保留高帧数。
消除庞杂的对象层级
把对象层级拆开。如果某个GameObjects不需要嵌到层级里,我们可以简化对象的从属关系。更精简的对象层级可以很好地利用多线程处理来刷新对象的Transform,而复杂的层级结构会导致多余的Transform计算和更高的垃圾数据回收成本。
关于Transform的最佳设置方法,请在Optimizing the Hierarchy和这段Unite演讲中详细了解。
尽量一次完成对象变换
在移动Transform时,请调用Transform.SetPositionAndRotation一次性完成对象的移动和旋转,这样做可避免两次修改同一变换,节省运算开销。
如果你需要在运行时实例化一个GameObject,则可以在实例化之际嵌入并移动对象,来达到优化的目的:
GameObject.Instantiate(prefab, parent);
GameObject.Instantiate(prefab, parent, position, rotation);
关于Object.Instantiate的更多细节,请参见Scripting API。
Vsync 在移动平台上默认启用
大部分移动端设备并不会将图像帧一分为二进行渲染。但即便我们在编辑器选项中禁用Vsync(Project Settings > Quality),Vsync功能仍会在硬件层面上启用。因为如果GPU频率不够高,帧将被滞留直到渲染完成,导致帧数降低。
Written with StackEdit.