Version: 2023.1
动画过渡
Playables API

动画常见问题解答

一般问题

什么是“Mecanim”?

Mecanim 是我们集成到 Unity 中的动画软件的名称。在早期的 4.x 系列 Unity 中,它的功能与人形角色动画密切相关,并具有许多特别适合此用途的功能;并且它独立于我们旧的(旧版)集成动画系统。

Mecanim integrated humanoid animation retargeting, muscle control, and the state machine system. The name “Mecanim” comes from the French word “Mec” meaning “Guy”. Since Mecanim operated only with humanoid characters, our legacy animation system was still required for animating non-humanoid characters and other keyframe-based animation of GameObjects within Unity.

不过,我们此后开发并扩展了 Mecanim,并将其与动画系统的其余部分集成,以便能够在您的项目中用于动画的所有方面;因此,“Mecanim”与动画系统的其余部分之间并没有太清晰的分界线。鉴于此原因,您仍然会在我们的文档和整个社区中看到对“Mecanim”的引用,现在这些引用仅仅指的是我们的主动画系统。

动画 (Animation) 组件和 Animator 组件之间有何差异?

动画组件(Animation)是我们的旧版动画系统中用于动画的旧组件。它仍然保留在 Unity 中的目的是实现向后兼容,但不应将其用于新项目。而应使用最新的 Animator 组件。

左:旧版动画(Animation) 组件。右:新式的Animator组件
左:旧版“动画”(Animation) 组件。右:新式的“Animator”组件

Animation 窗口和 Animator 窗口之间有何差异?

The Animation Window allows you to create and edit animation clips within Unity. You can use it to animate almost every property that you can edit in the inspector, from a Game Object’s position, a material color, a light’s brightness, a sound’s volume, and even arbitrary values in your own scripts.

The Animator Window allows you to organize your existing animation clip assets into a flowchart-like system called a state machine.

这两个窗口都是我们当前动画系统(而不是旧版系统)的一部分。

因此动画组件是旧版,而 Animation 窗口是最新版?

正确。

我们正在使用旧版动画系统来处理角色动画。我们是否应该改用最新的动画系统 (Mecanim)?

一般情况下,是的。提供旧版动画系统只是为了向后兼容旧项目,与我们最新的动画系统相比,它的功能非常有限。使用它的唯一理由应该是为了兼容使用旧系统构建的旧版项目。

导入

为什么导入的网格附有 Animator 组件?

When Unity detects that an imported file has animation in its timeline, it will add an animation component on import. You can modify this in the asset’s import settings by setting the “Animation Type” to None in the import settings under the Rig tab. If necessary you can do this with several files at once.

层的排序是否重要?

是的。层的优先级是按顺序从上到下的。层设置为 override 将始终覆盖先前的层(如果层有遮罩,则基于其遮罩)。

基础层的权重值是否应始终设置为 1?或者在使用其他层时权重是否应为 0?

基础层权重始终为 1,覆盖层将完全覆盖基础层。

有没有任何办法可以从控制器获取变量值而不使用名称字符串?

您可以使用整数来标识状态和参数。使用 Animator.StringToHash 函数来获取整数标识符值。例如:

runState = Animator.StringToHash("Base Layer.Run");
animator.SetBool(runState, false);

如果同步层中的状态与基础层中的相应状态相比具有不同的长度,会发生什么情况?

If layers are of different lengths, they will become unsynchronized. Enable the Timing option to force the timing of the states on the current layer, on the source layer.

Avatar 遮罩

有没有办法创建除 LeftFoot、RightFoot、LeftHand、RightHand 之外的 AvatarIKGoal?

有,支持膝盖和肘部 IK(反向动力学)。

有没有办法定义 Avatar 遮罩包含的变换组件?

Yes, for Generic clips you can define which transform animation is imported or not. For Humanoid clips, all human transforms are always imported and extra transforms can be defined.

动画曲线

具有曲线的动画如何与没有曲线的动画混合?

When you have an animation with a curve and another animation without a curve, Unity will use the default value of the parameter connected to the curve to do blending. You can set default values for your parameters, so when blending takes place between a State that has a Curve Parameter and one that does not have one, it will blend between the curve value and the default parameter value. To set a default value for a Parameter, simply set its value in the Animator Tool window while not in LiveLink.

动画过渡
Playables API