性能与优化
角色设置
1.骨骼数量
当需要增加自定义的附件,额外的骨骼会增加打包的大小,和可能产生相关进程消耗。例如,15个附加的骨骼在已经有30根骨骼的骨架需要花费多50%的时间去解决在Generic模式下。当添加的骨骼没有动作播放的时候,进程消耗可以忽略不计。如果添加的骨骼不存在或者隐藏会消耗更低。
2. 多个蒙皮模型
尽可能的合并蒙皮的模型,切分的模型会降低性能。最好就是角色只有一个材质。
动画系统
1. 控制器
如果没有设置Controller,Animator不会消耗进程。
2. 简单动作
播放单个没有混合的动画片段会导致Unity变慢相比遗留的动画系统。旧系统很直接,采样曲线然后直接写入transform中。Unity目前的的动画系统为动作混合提供临时的缓冲区,然后额外拷贝了采样曲线和其他数据。目前的系统设计优化了动作混合和其他复杂的设置。
3. 缩放曲线
为了提高性能,应该避免动画缩放。动画缩放比位移和旋转更加耗性能。注意:常量曲线不受这个限制,比正常曲线更加优化。
4. 动画层
大部分时间Unity都在计算动画,而且会保持动画层和状态机的开销在最小值。添加的另外的动画层的消耗,不管同步与否,取决于层中的动画和动画树。当层的权重为零时,Unity会跳过层的更新。
5. 类人和一般动画类型的比较
有一些提示可以帮助决定用哪种类型:
①当导入类人型动画使用Avatar Mask去移除IK目标和手指动画如果你不需要它们。
②当你使用Generic,使用root motion比不使用更加耗。如果你的动画不需要根骨骼运动,请确保你没有指定根骨骼。
6. 场景级别的优化
①使用哈希值代替字符串去查询动作器
②执行一个小的AI层去控制动作器。你可让它提供简单的callback给OnstateChange,③OnTransitionBegin,和其他的事件。
④使用状态标签可以简单的匹配你的AI状态机和Unity状态机。
⑤使用附加曲线去计算事件
⑥使用附加曲线去提高你的动画。例如目标匹配的链接
7. 运行时的优化
可见性和更新
通常把动画器的裁剪模式设置为根据渲染(Based on Renderers),和取消蒙皮模型的渲染更新当它不在屏幕内的时候。