转换规则

用于控制状态机转换的规则指南

Windows
MacOS
Linux

创建转换规则

转换规则 是控制状态机 内部流的方法,会沿着连接 状态导管 的引线自动创建。这些转换规则可以对变量值执行任意数量的检查和测试,目的是输出true或false值来确定动画是否发生转换。

要将状态或导管连接起来,可以单击左键并从一个状态(或导管)拖到另一个:

ConnectStates.png

建立连接后,会在连线内部出现一个循环方向的小图标,这就是转换规则:

TransitionRule.png

在将鼠标移到该图标上时,会显示一个指示,指出具体规则的内容:

TransitionRuleMouseOver.png

在该示例中,为了从 JumpLoop 转换到 JumpEnd,变量 IsInAir? **不得是**true。

还可以设置规则来确定双向转换流:

RulesBothWays.png

这意味着,可以设置规则以从一个状态退出,进入另一个状态,再设置一个规则以转换回到该状态。

编辑转换规则

双击 转换规则 将打开一个窗口,供您定义为了发生转换而必须满足的变量。

EditRule.png

类似于 蓝图,您可以在 我的蓝图(My Blueprint) 窗口中指定变量,并拖到图表中。通过将变量连接到各种条件,继而将条件连接到 结果(Result) 节点,可以定义为了发生转换而必须为_true(或_false)的变量。

有关蓝图入门的信息,请参考蓝图简介 文档。

转换规则细节

在点击 转换规则 时,细节(Details) 面板将会更新,并有更多选项可供使用。

TransitionDetails.png

属性

说明

转换优先顺序(Transition Priority Order)

转换的优先顺序。如果源自一个状态的多个转换同时为_true_,则优先级数字最小的转换具有最高优先级。

双向(Bidirectional)

确定转换是否为双向。

混合逻辑(Blend Logic)

指定要使用的转换逻辑:标准混合(Standard Blend),初始化自定义混合

转换规则共享(Transition Rule Sharing)

该选项用于设置是否可以与其他转换共享规则,或者使用另一个转换的规则。

基于状态中的序列播放器的自动规则(Automatic Rule Based on Sequence Player in State)

该选项尝试根据最相关播放器节点的剩余时间和转换的淡入淡出持续时间自动设置规则,忽略内部时间。

转换淡入淡出共享(Transition Crossfade Sharing)

使用现有转换淡入淡出混合或将现有转换淡入淡出提升为共享。

持续时间(Duration)

要应用于淡入淡出的持续时间。

模式(Mode)

应用于淡入淡出的混合类型。请参阅动画混合模式 了解更多信息。

自定义混合曲线(Custom Blend Curve)

使用用户指定的混合曲线并在混合期间应用。

混合描述文件(Blend Profile)

用于按骨骼评估该转换的混合描述文件。

转换中断(Transition Interrupt)

设置触发权重阈值并指定通知状态类。

起始转换事件/自定义蓝图事件(Start Transition Event / Custom Blueprint Event)

在转换开始时从通知蓝图内部调用并执行事件。

结束转换事件/自定义蓝图事件(End Transition Event / Custom Blueprint Event)

在转换结束时从通知蓝图内部调用并执行事件。

中断转换事件/自定义蓝图事件(Interrupt Transition Event / Custom Blueprint Event)

在转换中断时从通知蓝图内部调用并执行事件。

惯性化

惯性混合是一种混合类型,但惯性化系统本身并不从源动画采样。相反,开始切换到新动画时,运动中固有的速度和加速度将被用于推进运动。

请参阅惯性化 以了解使用惯性化的更多信息。

可将 细节(Details) 面板中的 混合逻辑(Blend Logic) 属性设为 惯性化(Inertialization) 来启用惯性化。

StateMachine_Transition.png

在特定混合节点 上,也可将 过渡类型(Transition Type) 设为 惯性化(Inertialization)

需在使用惯性化(Inertialization)节点指定惯性混合在AnimGraph中发生的位置。

InertialBlendAnimGraph.png

下方视频演示了标准混合和惯性混合(播放速度已调整以便进行演示)。

在上述视频中,使用了标准混合来进行动画间混合。同时采样两个动画,并在过渡期间进行淡入淡出。

在将惯性化应用为混合逻辑时,我们在运动与最终输出姿势间添加Inertialization了节点。在这样做时,状态间的过渡会瞬间完成,且运动将延续到下一姿势。

自定义混合

除了上述节点,自定义混合图表中还会公开一些信息,允许将它们用于多个镜头的自定义转换动画。

CustomBlendNodes.png

序号

节点

说明

1

状态权重(State Weight)

获取指定状态的混合权重。

2

获取经过的转换时间(Get Transition Time Elapsed)

获取指定转换的经过时间,以秒为单位。

3

获取经过的转换时间(比率)(Get Transition Time Elapsed (ratio))

获取经过的时间占指定动画淡入淡出持续时间的分数。

4

获取转换淡入淡出持续时间(Get Transition Crossfade Duration)

获取指定转换的淡入淡出持续时间。

您还可以使用引用资源播放器的GET节点,就像转换规则一样。

如果您理解虚幻中的动画编程,还可以使用原生Getter 来改善性能。

其他注意事项

在处理子动画蓝图 并覆盖状态机中的动画时,转换规则引用的动画不必在每个子动画蓝图中保持相同长度。在使用 剩余时间 等节点(可以用于确定动画中剩余多少时间并可以用作转换规则的一部分)时,此类节点能够在子动画蓝图中的动画被覆盖时正确响应动画长度的变化。

此外,您可以不必作为转换规则的一部分定位可能会变化或被覆盖的特定动画,而是改用多个基于类的GET节点,此类节点始终从源状态中拾取具有最高权重的动画(见下图)。

GetRelevantNodes.png

序号

节点

说明

1

获取相关动画长度(运动)(Get Relevant Anim Length (Movement))

获取源状态中最相关动画的长度,以秒为单位。

2

获取相关动画时间(运动)(Get Relevant Anim Time (Movement))

获取源状态中最相关动画的当前累计时间,以秒为单位。

3

获取相关动画时间分数(运动)(Get Relevant Anim Time Fraction (Movement))

获取源状态中最相关动画的当前累计时间占动画长度的分数。

4

获取相关动画剩余时间(运动)(Get Relevant Anim Time Remaining (Movement))

获取源状态中最相关动画的剩余时间,以秒为单位。

5

获取相关动画剩余时间分数(运动)(Get Relevant Anim Time Remaining Fraction (Movement))

获取源状态中最相关动画的剩余时间占动画持续时间的分数。

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback