转换规则

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

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)

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

惯性化

惯性混合是一种混合类型,但惯性化系统本身并不从源动画采样。相反,开始切换到新动画时,运动中固有的速度和加速度将被用于推进运动。例如,使用标准混合时,动画A在一段时间内会与动画B混合。 使用惯性化,在决定动画A应过渡到动画B时,过渡会瞬间完成,惯性化系统将系统处理过渡,而非依赖两个姿势的混合。

这样,无需在常见“闲置”姿势中烘焙动画来协助混合过渡。此外,该操作在运行时更为高效(因为仅计算目标姿势),缩短了片段长度(因为输出姿势需保持运动),同时提高了“跳过”许多姿势的系统质量。

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

StateMachine_Transition.png

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

需在AnimGraph中指定使用 Inertialization节点发生惯性过渡的位置。

InertialBlendAnimGraph.png

在与实际初始化请求相差甚远的图表中,Inertialization节点可能出现得很晚。无需要求其紧跟状态机或混合列表节点。此外,可在动画图表中使用多个惯性化节点。此类情况的一个例子是:要将惯性化应用于角色的下半身(可能是腿部)和上半身(手臂)。

使用惯性化创作动画时,建议在动画处于运动状态时提前结束动画,而非等待其继续并进入闲置或中性姿势时结束。惯性化系统将承载动画的动量,从而更加自然地过渡到不同动画状态,否则淡入淡出将极为复杂。

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

在上述视频中,为在动画间混合,使用标准混合时将同时采样两个动画,并在过渡期间进行淡入淡出。 将惯性化应用为混合逻辑并在运动与最终输出姿势间添加Inertialization节点时,状态间的过渡会瞬间完成,且运动将延续到下一姿势。

参阅 内容范例(Content Examples) 项目和 动画(Animation) 贴图,可了解在动画蓝图和状态机内使用的惯性化范例。

自定义混合

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

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

欢迎来到全新虚幻引擎4文档站!

我们正在努力开发新功能,包括反馈系统,以便您能对我们的工作作出评价。但它目前还未正式上线。如果您对此页面有任何意见与在使用中遭遇任何问题,请前往文档反馈论坛告知我们。

新系统上线运行后,我们会及时通知您的。

发表反馈意见