Unity学习笔记 Vol.69 动画绑定(Animation Rigging)教程
摘要

动画绑定(Animation Rigging)让用户可以根据 C# Animation Jobs API 创建和组织不同的约束集,来满足与动画绑定相关的多种需求。 详细教程请参考官方视频

示例项目:https://github.com/cardosoandre/Animation-Rigging-Examples
我们将了解动画绑定(Animation Rigging)包中的一些功能,动画绑定可以为运行时的骨架动画,制作程序化的动作,这表示我们可以顺畅地混合关键帧动画和程序动画,我们将学习如何 设置骨骼绑定约束,并查看一些使用这个工具包制作的示例。
教程

首先,使用Package Manager,将动画绑定包添加到项目中,在Package Manager中展开Advance下拉菜单,勾选显示预览包(Show preview packages)选项,找到动画绑定(Animation Rigging)选项进行安装。首先,我们希望角色的骨骼结构能够可视化和易于选择,要实现这一点,选择根游戏对象(Root GameObject),并添加骨骼渲染器(Bone Renderer)组件。

在这个组件中,我们可以将骨架的所有Transform添加到 Transform列表中,这一步是可选的,但会让Unity创建可见的骨架小工具。

这样做以后,我们就能够在场景视图中直接选择骨架某个部分了,而不用再通过层级(Hierachy)窗口去选择。

要继续设置,我们需要将Rig Builder组件添加到根游戏对象上,Rig Builder组件需要添加到具有动画器组件的游戏对象上,Rig Builder需要影响与动画器相同的层级,通过使用Rig层,Rig Builder组件可以实现多Rig渲染,这个功能可以随时启用或禁用。

我们可以创建新游戏对象作为子角色,来添加新Rig,将它命名为Rig Example,并为它添加Rig组件。

现在可以将Rig Example拖入之前创建的Rig Builder的Rig层列表中。这是基本设置,之后就能为动画添加约束了,每个约束都必须是Rig的子游戏对象,并根据其层级(Hierarchy)中的顺序进行交互。

这表示如果添加了Rotation_Constraint,再添加TwoBone_Constraint,TwoBone_Constraint将覆盖Rotation_Constraint。

让我们为Rig添加一个新的子游戏对象,并将它命名为Parent_Constraint,在这个游戏对象中,我们将添加多个Parent_Constraint组件,这会让角色的某部分骨骼移动和旋转,就像一个新游戏对象的子对象一样,在第一个字段中,我们要添加希望被约束影响的Transform,这里我们将角色的Spine拖进来,在Source Objects列表中,我们需要指出这个约束引用了哪个对象。

这里,我们要为约束创建一个控制器,并且要易于可视化和编辑,因此我们创建一个游戏对象,作为约束的子对象,命名为Controller,让它与Spine对齐,即同时选中Controller和Spine,找到Animation Rigging菜单,然后选择Align Transform。

如果选中Controller游戏对象,在场景视图 中可以看到,在右下角出现了一个新的Animation Rigging UI,通过它可以为游戏对象添加小工具,这些小工具可以像控制器(Controller)一样工作,而且可以在场景视图中进行选择和使用。

让我们添加CircleEffector作为Controller的形状,并更改它的大小和旋转,这样场景中就有一个不错的控制器了。

返回Parent_Constraint,添加一个Controller作为Source Object,将它拖入Multi-Parent组件的Source Object字段中即可。

如果进入Play模式,可以看到,即使角色有正在播放的空闲动画,我们还是可以选择刚刚创建的Controller,旋转它,这样它会将约束动作和现有动画混合在一起。

我们再创建一个约束,这一次,我们将尝试Two Bone IK Constraint,这个约束可以控制角色的双手动作,同时让手臂随之运动。现在,只需再为Rig添加一个空游戏对象即可,将它命名为RightHandIK,然后为它添加Two Bone IK Constraint组件,在这个组件中,我们需要引用骨架结构的Root、Mid和Tip。这里,拖入RightUpperArm作为Root,RightLowerArm作为Mid,RightHand作为Tip。

我们还想为这个约束(Constraint)创建一个控制器,所以要重复之前的过程,创建一个空游戏对象,让它与Hand Transform对齐,使用的是Animation Rigging的Align Transform功能。

为控制器添加一个SquareEffector。

控制器设置好后,将它拖入Two Bone IK Constraint组件的Target字段中。

如果进入Play模式,可以看到角色的右手,保持在Target的位置上,而不受空闲动画关键帧影响,这是因为现在的动画是与IK Constraint混合而成的,现在选择Effector,尝试移动右手,由于使用了约束(Constraint),整个手臂都是基于Target位置自然移动的。

如果我们为角色四肢重复同样的流程和步骤,就能完全控制双手和双腿了,动作与原始的空闲动画结合,项目中还展示了可以用这个功能制作出的内容,示例链接在上方描述中。如果你要查看这个包中所有可用的约束和功能,可以通过Package Manager,导入官方示例。