Avatar
# 人形Avatar
Unity 的动画系统具有处理人形角色的特殊功能。因为人形角色在游戏中很常见,所以 Unity 为人形动画提供专门的工作流程以及扩展工具集。
Unity 使用Avatar
系统来识别布局中的特定动画模型是否为人形,以及模型的哪些部分对应于腿、手臂、头和躯干。
由于不同人形角色之间骨骼结构的相似性,可将动画从一个人形角色映射到另一个角色,允许重定位和反向运动学 (IK
)。
# 导入人形动画
当 Unity 导入包含人形骨架和动画的模型文件时,需要将模型的骨骼结构与其动画进行协调。为了实现这一点,系统会将文件中的每个骨骼映射到人形 Avatar
,这样才能正确播放动画。因此,在将模型文件导入 Unity
之前,仔细准备该文件非常重要。
定义骨架类型并创建
Avatar
。纠正或验证
Avatar
的映射。完成骨骼映射后,可选择单击
Muscles
&Settings
选项卡来调整Avatar
的肌肉配置。可以选择将骨架骨骼到
Avatar
的映射保存为人体模板 (.ht
) 文件。可以选择通过定义
Avatar
遮罩来限制在某些骨骼上导入的动画。从
Animation
选项卡中,启用Import Animation
选项,然后设置其他特定于资源的属性。如果文件包含多个动画或动作,可将特定动作范围定义为动画剪辑。
对于文件中定义的每个动画剪辑,可以:更改姿势和根变换,优化循环, 对人形骨架两侧的动画进行镜像 (
Mirror
)。 向剪辑添加曲线以便动画化其他项的时序,向剪辑添加事件以便在动画期间触发某些动作, 丢弃动画的一部分(类似于使用运行时Avatar
遮罩,但却是在导入时执行的), 选择其他根运动节点来驱动动作要保存更改,请单击
Import Settings
窗口底部的Apply
按钮,也可单击Revert
放弃所做的更改。
# 设置 Avatar
从 Inspector
窗口的 Rig
选项卡中,将 Animation Type
设置为 Humanoid
。默认情况下,Avatar Definition
属性设置为 Create From This Model
。如果保持该选项,Unity
会尝试将文件中定义的一组骨骼映射到人形 Avatar
。
注意:在某些情况下,可将此选项更改为 Copy From Other Avatar
,从而使用事先为其他模型文件定义的 Avatar
。例如,如果在 3D 建模应用程序中使用多个不同的动画来创建一个网格(皮肤),则可以将网格导出到一个 FBX
文件,并将每个动画导出到各自的 FBX 文件。将这些文件导入 Unity
时,只需为导入的第一个文件(通常是网格)创建一个 Avatar
即可。只要所有文件都使用相同的骨骼结构,便可以将该 Avatar
用于其余文件(例如,所有动画)。
如果启用此选项,必须通过设置 Source
属性来指定要使用的 Avatar
。
单击 Apply
按钮。Unity
会尝试将现有骨骼结构与 Avatar
骨骼结构相匹配。在许多情况下,它可以通过分析骨架中骨骼之间的连接情况来自动执行此操作。
如果匹配成功,Configure
菜单旁会出现一个复选标记。Unity
还会将 Avatar
子资源添加到模型资源(可以在项目视图中找到该资源)。
成功匹配只是意味着 Unity
能够匹配所有必需的骨骼。但是,为了获得更好的结果,还需要匹配可选骨骼,并将模型设置为正确的 T
形姿势 (T-pose
)。
如果 Unity
无法创建 Avatar
,Configure
按钮旁将显示一个叉号,且项目视图中不显示任何 Avatar
子资源。
由于 Avatar
是动画系统极其重要的一个方面,因此为模型正确配置 Avatar 非常重要。出于这一原因,无论自动创建 Avatar
是否成功,都务必要检查 Avatar
是否有效并正确进行设置。
# 配置 Avatar
如果 Unity
无法为模型创建 Avatar
,必须单击 Rig
选项卡上的 Configure ...
按钮以打开 Avatar
窗口并修复 Avatar
。
如果匹配成功,可以单击 Rig
选项卡上的 Configure ...
按钮,或从项目视图中打开窗口:
单击项目视图中的
Avatar
子资源。Inspector
将显示Avatar
名称和Configure Avatar
按钮。单击
Configure Avatar
按钮。
如果尚未保存 Avatar
,则会显示一条消息,要求保存场景:
出现这种情况的原因是,在 Configure
模式下,Scene
视图用于单独显示所选模型的骨骼、肌肉和动画信息,而不显示场景的其余部分。
保存场景后,Inspector
内将显示 Avatar
窗口,其中显示所有骨骼映射。 确保骨骼映射正确,并映射了 Unity
未分配的任何可选骨骼。
骨架必须至少具备所需的骨骼才能让 Unity
产生有效的匹配。为了提高与 Avatar
相匹配的机会,请确保骨骼的命名方式反映了其所代表的身体部位。例如,“LeftArm
”和“RightForearm
”明确显示了这些骨骼的控制对象。
# 映射策略
如果模型未产生有效匹配,可以使用与 Unity 内部过程类似的过程:
如果自动映射彻底失败或部分失败,可以通过从 Scene
视图或 Hierarchy
视图中拖动骨骼来手动分配骨骼。如果 Unity
认为骨骼适合,该骨骼会在 Avatar Mapping
选项卡中显示为绿色;否则显示为红色。
# 重置姿势
T 形姿势是 Unity
动画所需的默认姿势,也是在 3D
建模应用程序中建模的推荐姿势。但是,如果没有使用 T 形姿势对角色进行建模并且动画无法按预期工作,则可以选择:
如果骨骼分配正确,但角色未处于正确的姿势,将看到消息“Character not in T-Pose
”。此时可从 Pose
菜单中选择 Enforce T-Pose
来修复该问题。如果姿势仍然不正确,可以手动将剩余的骨骼旋转为 T
形姿势。
# 创建 Avatar 遮罩
通过遮罩功能可以丢弃剪辑中的一些动画数据,从而让剪辑仅动画化对象或角色的某些部分而不是整体。例如,可能有一个标准的行走动画,其中包括手臂和腿部运动,但如果一个角色用双手抱着大型物体,那么不会希望其手臂在行走时向侧面摆动。但是,仍然可以在角色抱着物体时使用标准行走动画,但需要使用遮罩在行走动画的上层仅播放抱着物体动画的上半身部分。
可以在导入时或运行时将遮罩应用于动画剪辑。最好是在导入时应用遮罩,因为这样做允许从构建中忽略丢弃的动画数据,从而使文件更小,进而使用更少的内存。此外还可以提高处理速度,因为在运行时需要混合的动画数据更少。在某些情况下,导入遮罩可能对您不适用。这种情况下,可在运行时应用遮罩,为此需要创建 Avatar
遮罩 (Avatar Mask
) 资源,并在 Animator Controller
的层设置中使用该资源。
要创建空的 Avatar
遮罩资源,可以:
从
Assets
菜单中选择 Create > Avatar Mask。在项目视图中单击要定义遮罩的模型对象,然后单击右键并选择 Create > Avatar Mask。
新资源将显示在项目视图中:
现在可以将人体部位添加到遮罩
,然后将遮罩添加到动画层
或添加对遮罩的引用(在 Animation
选项卡的 Mask
部分)。