102 lines
4.3 KiB
Plaintext
102 lines
4.3 KiB
Plaintext
INTSourceChangelist:3108692
|
||
Availability:NoPublish
|
||
Title:状态机
|
||
Crumbs:
|
||
Description:借助状态机,你可以将骨架动画拆分成各个状态,从而全面控制从一个状态混合到另一个状态的方式。
|
||
|
||
[EXCERPT:DummyExcerpt]
|
||
|
||
[/EXCERPT:DummyExcerpt]
|
||
|
||
|
||
|
||
[EXCERPT:UAnimStateNode]
|
||
|
||
从概念上讲,理解状态的最佳方式是将其视作动画图表的有条理的部分,角色或骨架网格体将有规律地混入及混出此状态。然后,你可以转换到图表的此部分或从图表的此部分向其他部分转换。例如,你可能为角色的动画创建了一个“闲散(Idle)”状态,而该状态可能仅包含单个动画。
|
||
|
||
下图中就是这样的一个“闲散(Idle)”状态(从状态机查看)。
|
||
|
||

|
||
|
||
双击该状态之后,你将看到该“闲散(Idle)”状态中包含的简单图表。
|
||
|
||

|
||
|
||
但是,角色开始移动之后,它们会转换到“移动(Movement)”状态,它可以定义在表面上的横向移动,例如行走或奔跑。
|
||
|
||

|
||
|
||
此状态中可能包含由角色的速度和移动方向定义的[混合空间](Engine/Animation/Blendspaces)。
|
||
|
||

|
||
|
||
状态自身不带引脚,也没有输入的引脚,因为系统设计目标是让它们拥有更自由的布局形式。要将一个状态与任何其他状态相连接,只需从其外部边界拖出引线即可。你也可以使用此方法来创建新状态,与在蓝图中创建新节点类似。
|
||
|
||

|
||
[/EXCERPT:UAnimStateNode]
|
||
|
||
|
||
|
||
|
||
[EXCERPT:UAnimStateConduitNode]
|
||
|
||
|
||
导管是更加高级且可共享的转换资源。在不同的状态之间,转换规则是简单的“1对1”关系,而导管则可以采取“1对多”、“多对1”或“多对多”的形式。
|
||
|
||

|
||
|
||
例如,你可能会碰到这样的情况:当角色被杀死时,可能需要播放多个动画。你可以先从指示“该角色在生命值小于或等于0时进入死亡状态”的简单转换规则开始。但是,如果转换进入导管而非状态,你可以执行一系列检查,以搞清楚玩家的死亡原因(中弹、被刺、爆炸、被车撞、头部遭钝击等),然后从此处建立分支,以进入各种各样的独立死亡状态。
|
||
|
||
略微简化后的图表与下图相似:
|
||
|
||

|
||
|
||
导管图表的内部看起来与转换规则相似:
|
||
|
||

|
||
|
||
从导管出来的实际转换规则即可确定死因类型,从而允许角色混合到相应的状态。
|
||
[/EXCERPT:UAnimStateConduitNode]
|
||
|
||
|
||
|
||
|
||
|
||
|
||
[EXCERPT:UAnimStateTransitionNode]
|
||
|
||
|
||
定义好状态后,你需要能够控制骨架网格体从一个状态转换到另一个状态的方式。这时需要用到转换规则。转换规则沿连接状态的引线自动创建。
|
||
|
||

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

|
||
|
||
在本示例中,我们测试角色移动速度的数值。如果数值大于10,则启用转换。在这种情况下,角色可以从“闲散(Idle)”状态转换到“移动(Movement)”状态。然后可以使用完全不同的规则使其转换回“闲散(Idle)”状态。例如,此示例中有一个从“移动(Movement)”移向“闲散(Idle)”的转换规则。
|
||
|
||

|
||
|
||
此规则将进行检查,以确定用于转换 _到_“移动(Movement)”状态的相同值是否不再为True。
|
||
|
||

|
||
|
||
有关转换规则及其属性的更多信息,请参阅[转换规则文档](Engine/Animation/StateMachines\TransitionRules)。
|
||
[/EXCERPT:UAnimStateTransitionNode]
|
||
|
||
|
||
|
||
|
||
|
||
[EXCERPT:UAnimGraphNode_Root]
|
||
|
||
在动画图表中处理完动画后,使用引线将最终动画姿势结果与此节点连接起来,以将它应用给该网格体。
|
||
[/EXCERPT:UAnimGraphNode_Root]
|
||
|
||
|
||
[EXCERPT:UAnimGraphNode_StateMachine]
|
||
|
||
状态机是状态、转换和导管的集合。状态机将基于你在状态转换中定义的规则更改状态。从概念上讲,每个状态都是独立的动画图表,可以输出动画姿势。你可在包含状态机的动画图表中进一步操纵该动画姿势。
|
||
[/EXCERPT:UAnimGraphNode_StateMachine]
|