状态机总览

解析状态机的工作原理和其内部使用的核心系统。

Choose your operating system:

Windows

macOS

Linux

动画 状态机(State Machines) 可助您以更模块化的方式理解 动画蓝图 。用户可定义角色或骨架网格体将拥有的诸多状态。此外还可定义角色或骨架网格体进入和退出每种状态的时机,与流程图相似。

例如,您可能拥有如下定义角色动画流程的流程图:

AnimationFlowChart.png

如需为以上流程设置状态机,最终效果应与下图相似:

StateMachine.png

剖析状态机

状态机的主要构成部分有二:各种状态的网络、以及定义状态转入转出的规则。每种状态和每条规则设置都是其自身浓缩的 蓝图 网络。这易于处理复杂动画混合,无需使用过于复杂的 AnimGraph

状态

从概念上而言,理解状态的最佳方式是将其视为 AnimGraph 的一个组成部分。角色和骨架网格体将定期混入混出此状态。然后即可转入转出图表的该部分。例如,角色动画拥有"待机(Idle)"状态,而该状态可能只包含单个动画。

下图便是状态机中的显示的"待机(Idle)"状态。

State.png

双击 状态打开图表,可在此定义 最终动画姿势(Final Animation Pose) 中的内容。

IdleStateInside.png

角色开始移动后,即会转入运动状态 — 定义表面上的横向移动,如行走和奔跑。

MoveState.png

此状态中可能包含一个由角色速度和移动方向定义的 混合空间

MovementInside.png

状态自身不带引脚,也没有输入的引脚,因为它们拥有更自由的布局形式。

从其外部边界拖动引线即可连接状态或创建新状态(与蓝图相似)。

DragWire.png

转换规则

定义状态后,需要控制骨架网格体如何从一个状态转换到另一个状态,这便是需要用到 转换规则 。转换规则沿连接状态的引线自动创建。

TransitionRule.png

转换规则可对变量值执行任意数量的检查和测试,目的是输出一个 True/False 值。此布尔输出决定动画是否能通过转换。

TransitionRuleInside.png

上图中正在对角色的速度值进行测试。数值大于 10 后便会开启转换。在此例中,角色将从待机状态进入移动状态。然后使用完全独立的规则转换回待机状态。

例如,此处有一个从移动回到待机的转换规则。

TransitionRuleReturn.png

将进行检查,确定用于转换到移动状态的相同数值是否已不为 true。

TransitionRuleReturnInside.png

导管

导管(Conduit) 是更高级的共享转换资源。转换规则只是从一个状态到另一个状态的简单 1 对 1 关系,而导管可以是 1 对多、多对 1,或多对多关系。图表中的导管和状态相似,但带导管名称的图标不同(如下图)。

ConduitNode.png

导管的使用范例之一 — 角色死亡时播放多个动画。

从简单的转换规则开始,体力值小于等于零时角色进入死亡状态。然而,如果转换未进入状态而进入导管,即可执行一系列检查,确认角色的死亡方式(枪击、穿刺、爆炸、车撞、重物击头等)并分开进入诸多单独的死亡状态。

简单版本的图表与下图相似:

ConduitGraph.png

导管图表的内部和转换规则相似:

ConduitInside.png

从导管退出的实际转换规则即可决定死亡的类型并混合到适当的状态。

鼠标悬停预览

状态机的功能之一是通过鼠标悬停查看状态机自身和其组件节点的预览。如在状态机上悬停鼠标,将弹出预览窗口,显示状态机的高级视图。这与重叠蓝图网络相似。

StateMachineHoverPreview.png

也可预览状态机中的诸多状态和转换规则。在它们上方悬停鼠标即可预览其中内容。

IdleStatePreview.png

预览转换规则时不但可以预览节点,还可查看规则的文字说明。

TransitionRulePreview.png

欢迎帮助改进虚幻引擎文档!请告诉我们该如何更好地为您服务。
填写问卷调查
取消