本文内容
第26章 动画状态机
第26章 动画状态机
介绍
Note:本章的关卡和资源可以在 GitHub 上找到: https://github.com/AMZN-Olex/O3DEBookCode2111/tree/ch26_animation_statemachine
在第 25 章 动画简介的基础上,我们将添加一个鸡动画,以使用鸡拍打动作来庆祝进球。这将涉及在 Animation Editor 中构建状态机、定义过渡和参数作。
图 26.1.动画状态机
添加摆动动作
- 使用 chicken.animgraph 从 Anim Graph 组件中打开 Animation Editor。
- 转到 Motions Sets。
- 对于 MotionSet0,从 C:\O3DE\21.11.2\Gems 添加 chickenflapping.motion \NvCloth\Assets\Objects\cloth\Chicken\Motions。
- 保存运动集。
添加 Celebration 混合树
- 添加一个布尔值 (复选框) 参数并将其命名为 “Celebrating”。当该参数的值设置为 true 时,鸡会播放拍打动作来庆祝进球。
- 将参数的默认值设置为 false。
- 动画图形中只有一个混合树。将其重命名为 Playing BlendTree,以便我们可以将其与即将添加的第二个新混合树节点区分开来
- Create Node → Sources → Blend Tree.
- 重命名为 “Celebration BlendTree”.
- 双击 Celebration Blend Tree.
- Create Node → Sources → Motion.
Note:当我们混合空闲和行走运动时,我们使用了 Blend Two 节点。但是,对于庆祝动作,我们不需要进行任何混合。我们只想让鸡玩拍打的动作。
- 将新运动节点重命名为 Celebration Motion。
- 选择运动节点后,在“属性”面板的“运动”下,从 C:\O3DE\21.11.2\Gems\NvCloth\Assets\Objects\cloth\Chick 分配拍打鸡的运动 en\Motions 的 Motions 中。
- 将庆祝动作的输出姿势与 FinalNode1 的输入姿势连接起来。
- 回到一个关卡。
- 左键单击并从 Playing Blend Tree 中拖动一个箭头到 Celebration Blend Tree。
Tip:为了绘制箭头,请在远离其名称的节点边缘处单击鼠标左键。如果您将鼠标悬停在节点上并慢慢向上移动,您将看到鼠标指针会改变其外观,指示该位置何时选择节点或开始创建箭头。
图 26.2.在 Blend Trees 之间添加过渡
- 选择箭头。
Note:现在,我们将添加一个条件,当一个混合树将过渡到另一个混合树时。
- 选择箭头后,在“属性”面板中,选择“添加条件”,然后选择“参数条件”。
- 使用“Select parameter(选择参数)”按钮,选择 Celebrating parameter(庆祝参数)。
- 对于“Test Function(测试函数)”,选择相等条件。
- 对于“测试值”,将值设置为 1 (1.0)。
Note:在参数条件中,Animation Editor 将布尔值 “true” 视为值 1 (1.0)。
- 这将创建一个条件,当 Celebrating 参数设置为 true 时,从 “Playing Blend Tree” 过渡到 “Celebration Blend Tree”。
Note:下一步是定义何时退出 celebration 状态并将 Celebrating 参数重置回 false。
- 左键单击并从 Celebration Blend Tree 拖动一个箭头到 Playing Blend Tree。
- 选择新箭头。
- 在“属性”面板中,选择“添加条件”,然后选择“状态条件”。这会将 State Condition 添加到 Attributes 面板。
- 在“状态”下,用户选择节点按钮以选择 Celebration Motion 节点。
- 对于“Test Function”(测试函数),选择“Has Reached Specified Playtime”(已达到指定的播放时间)。
- 对于 Play Time(播放时间),输入 2.0。
Note:Play Time (播放时间) 的单位是秒。如果你看一下 Motions 选项卡下的 “chicken flapping” 动作,你会发现它有 2.47 秒长。但是,它在结束时有一些空闲时间,因此我选择在 Motion 结束之前过渡。
现在,在同一个 Attributes (属性) 面板中选择 Add action (添加作),箭头仍处于选中状态。
选择 Parameter Action (参数作)。
将 Trigger Mode (触发模式) 保持为 “On Enter”(输入 时)。
对于参数,选择 Celebration 参数。
对于 Trigger Value(触发值),保持 0.0。这将创建一个作,即在所选过渡发生时将 Celebration 参数值设置为零(布尔参数为 false)。
更改参数值
通过这些更改,我们现在有一个状态机,它可以在庆祝运动和空闲运动与行走运动之间的混合之间切换。
图 26.3.动画状态机
您可以通过将 Celebrating 参数设置为 enabled,然后观看鸡庆祝动作播放两秒钟,然后切换回 Player Blend Tree,同时将 Celebrating 值设置回 false,来测试此逻辑。
图 26.4.参数列表
在动画图形中保存更改后,Anim Graph 组件将更新参数列表以显示 Celebrating 布尔参数。
图 26.5.具有更新参数的 Anim Graph 组件
小结
在本章中,我们增强了动画图形以添加庆祝动作,并在 Animation Editor 中对其进行了测试。我们知道它有效,但没有游戏逻辑来触发它。我们可以像上一章一样,通过向 C++ 组件添加逻辑来实现这一点。但是,我们之前已经这样做过,因此在下一章中,我将向您展示如何使用 O3DE 中的可视化脚本 Script Canvas 来执行此作。
Note:本章的资源可以在 GitHub 上找到,网址为: https://github.com/AMZN-Olex/O3DEBookCode2111/tree/ch26_animation_statemachine