当您开始为角色创建越来越多的复杂动画蓝图时,有时候您会想要在一个动画蓝图中重复使用另一个动画蓝图的某些部分。 您不必重新创建节点网络,而是可以将该网络与其自己的动画蓝图分离开,并使用 子动画实例 在需要时访问动画蓝图。
在本指南中,我们将创建动画蓝图,并设计能够影响可操作角色的逻辑,然后在模板的动画蓝图中使用子动画实例来调用该逻辑。
在本操作指南中,我们将使用 蓝图第三人称 模板,其中启用了 初学者内容包。
步骤
在 Content/Mannequin/Animations 文件夹中,右键单击 并 复制(Duplicate)ThirdPerson_AnimBP,将它命名为 AltAnimBP**。
该AltAnimBP将用作从ThirdPerson_AnimBP调用的子动画实例。
创建动画蓝图以用作子动画实例时,所使用的骨架资源必须与计划在其中融入该实例的动画蓝图中的资源相同。 在我们的示例中,我们复制了模板的动画蓝图,但在从头创建动画蓝图时,您需要选择一个骨架。
在 AltAnimBP 的 AnimGraph 中,单击右键 并添加 子图输入(Sub-Graph Input) 节点。
这样将在子动画实例上创建 输入姿势(In Pose),从而允许我们将外部姿势数据传递给该动画蓝图。
再次 单击右键 并添加 FABRIK 骨架控制节点。
例如,我们将使用IK在游戏期间,玩家四处奔跑时,将角色的手臂向上推入空中。
从 细节(Details) 面板为 FABRIK 节点分配以下设置。
取消选中 (作为引脚)效果器转换((As Pin) Effector Transform)
将 位置(Location) 设置为 100, 0, 200。
将 末梢骨骼(Tip Bone) 设置为 index_01_l。
将 根骨骼(Root Bone) 设置为 clavicale_l。
复制图表中的 FABRIK 节点,并从 细节(Details) 面板进行以下更改。
将 位置(Location) 设置为 -100, 0, 200。
将 末梢骨骼(Tip Bone) 设置为 index_01_r。
将 根骨骼(Root Bone) 设置为 clavicale_r。
这将确保左右手臂都会受影响。
右键单击 FABRIK 节点的 Alpha 引脚,并选择 提升为变量(Promote to Variable),命名为 效果Alpha(Effect Alpha)。
重新创建下面所示的节点网络(将自动创建 局部到组件(Local to Component) 和 组件到局部(Component to Local) 节点)。
如果您 编译 动画蓝图,预览窗口中的角色会抬起胳膊。
在 内容浏览器 中的 Content/Mannequin/Animations 下面,打开 ThirdPerson_AnimBP。
在 AnimGraph 内部,单击右键 并添加 子动画实例 节点。
这个节点将用于获取对所创建动画蓝图的访问权。
在 子动画实例 节点的 细节(Details) 面板中,将 实例类(Instance Class) 设置为 AltAnimBP。
单击 效果Alpha(EffectAlpha) 旁边的 公开(Expose) 复选框以公开属性。
通过公开属性,您可以用父动画蓝图中的数据更新这些属性。
从 我的蓝图(MyBlueprint) 面板,拖入 速度(Speed) 变量,并除以 600,然后插入到 效果Alpha(Effect Alpha)。
这里,我们用角色的移动速度除以一个值,以产生所应用的骨架控制量之间的混合。
编译(Compile),然后 在编辑器中运行(Play in the Editor)。
最终结果
在下面的结果中,随着角色速度的增加,用它除以指定数量,然后再用于驱动在子动画实例网络内部应用的骨架控制量。 在本示例中,我们使用了 子图表(Sub-Graph) 输入节点来确定产生的姿势数据,但是您也可以创建动画蓝图及其自己的状态机和逻辑来产生最终姿势数据。