版本:Unity 6 (6000.0)
语言:English
Playables 示例
Mecanim 常见问题

性能和优化

此页面包含一些提示,可帮助您在 Unity 中获得最佳性能,涵盖动画系统运行时优化

注意:有关在 3D 应用程序中建模角色以在 Unity 中获得最佳性能的提示,请参阅为最佳性能建模角色

动画系统

控制器

控制器未设置为Animator时,它不会花费时间进行处理。

简单动画

播放单个动画剪辑可用于动画角色或简单动画的动画数据。它是一段简单的“单元”运动,例如(一个特定实例的)“空闲”、“行走”或“跑步”。更多信息
请参见术语表
且不进行混合可能会使 Unity 比旧版动画系统慢。旧系统非常直接,对曲线进行采样并直接写入变换。Unity 当前的动画系统使用临时缓冲区进行混合,并且会额外复制采样曲线和其他数据。当前的系统布局针对动画混合和更复杂的设置进行了优化。

缩放曲线

动画缩放曲线比动画平移和旋转曲线开销更大。为了提高性能,请避免缩放动画。

注意:这并不适用于常量曲线(在动画剪辑长度内具有相同值的曲线)。常量曲线已优化,并且比普通曲线开销更小。与默认场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个唯一的关卡。在每个场景中,您放置环境、障碍物和装饰,从本质上讲,将游戏分成部分进行设计和构建。更多信息
请参见术语表
值相同的常量曲线不会在每一帧写入场景。

大多数情况下,Unity 正在评估动画,并将动画层动画层包含一个动画状态机,用于控制模型或其一部分的动画。例如,如果您有一个用于行走或跳跃的全身体层,以及一个用于上半身动作(如投掷物体或射击)的更高层。更高的层优先控制其控制的身体部位。更多信息
请参见术语表
动画状态机动画控制器中的一个图形,用于控制动画状态的交互。每个状态都引用一个动画混合树或单个动画剪辑。更多信息
请参见术语表
的开销保持在最低限度。向动画器添加另一层的成本(是否同步)取决于该层播放的动画和混合树。当层的权重为零时,Unity 会跳过层更新。

人形与通用动画类型

这些提示可帮助您在这两种类型之间做出选择

  • 导入人形动画使用人形骨骼的动画。人形模型通常具有相同的基本结构,表示身体、头部和四肢的主要关节部分。这使得可以轻松地将动画从一个人形骨骼映射到另一个人形骨骼,从而允许重新定位和反向运动学。更多信息
    请参见术语表
    时,使用头像用于将动画从一个绑定重新定位到另一个绑定的界面。更多信息
    请参见术语表
    蒙版(class-AvatarMask)来移除 IK 目标或手指动画(如果您不需要它们)。
  • 当您使用通用类型时,使用根运动角色根节点的运动,无论它是由动画本身还是外部控制。更多信息
    请参见术语表
    的开销比不使用它更大。如果您的动画不使用根运动,请确保您没有指定根骨骼。

场景级优化

可以进行许多优化,一些有用的提示包括

  • 使用哈希而不是字符串来查询动画器。
  • 实现一个小型 AI 层来控制动画器。您可以使其为 OnStateChange、OnTransitionBegin 和其他事件提供简单的回调。
  • 使用状态标记将您的 AI状态机动画控制器中的一组状态,角色或动画游戏对象可以处于这些状态,以及这些状态之间的一组转换以及一个用于记住当前状态的变量。可用的状态将取决于游戏玩法的类型,但典型状态包括空闲、行走、跑步和跳跃等。更多信息
    请参见术语表
    轻松地匹配到 Unity 状态机。
  • 使用其他曲线来模拟事件。
  • 使用其他曲线来标记动画;例如,结合目标匹配一个脚本函数,允许您以某种方式移动角色,以便手或脚在特定时间到达特定位置。例如,角色可能需要跳过踏脚石或跳起来抓住头顶的横梁。更多信息
    请参见术语表

运行时优化

可见性和更新

始终通过将动画器剔除模式设置为完全剔除并禁用蒙皮网格渲染器屏幕外时更新属性来优化动画。这可以防止 Unity 在角色不可见时更新动画。

Playables 示例
Mecanim 常见问题