Mecanim 动画系统(七)动画状态机

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010848412/article/details/79282344

1、状态机

基本思想是角色在任何给定时间忙于一些特殊的动作。可用的动作取决于游戏类型,但典型动作包括空闲、走路、跑步、跳跃等。这些动作称为状态,在场景中,角色处于走路、空闲等“状态”。通常,角色要进入另一种状况会受到限制,而不是可以直接从任何状态转换成任何其他状态。例如,跑跳仅在角色已经在跑步时而非停滞不前时实现,所以永远无法直接从空闲状态转换成跑跳状态。角色可从当前状态进入下一个状态的选型称为状态转换。总之,状态集、转换集和记住当前状态的变量形成了状态机。

状态机的状态和转换可用一个图解表示,其中节点代表状态,弧(节点之间的箭头)代表转换。您可以把当前状态看作一个标记或置于一个节点上的突出显示,然后只需沿着一条箭头跳转到另一个节点。

动画状态机的价值在于可以用相对较少的编码即可轻松设计和更新。每个状态有一个与之相关的动作 (Motion),并在机器处于该状态时播放。这样就使动画器或设计器能够定义角色动作和动画的可能顺序,无需担心代码如何工作。

状态机 (State Machines) 包含状态 (States)、转换 (Transitions) 和事件 (Events),较小的子状态机 (Sub-State Machines) 可在较大的机器中用作组件。

2、动画状态 

动画状态 (Animation State) 是 动画状态机 (Animation State Machine)的基本构造块。每个状态包含将在角色处于该状态时播放的单独动画序列(或混合树 (blend tree))。游戏中的事件触发状态转换时,角色会保留为新状态,该状态的动画序列随后会接管播放。

我们可以在Animator界面空白处右键->Create State -> Empty State 创建一个空的状态,再指定动作。

或者我们也可以直接拖拽一个动作到界面上直接生成对应的状态。如下图

单击某个状态,可以在右侧看到状态的属性。如下图

Speed:表示动画的默认速度

Motion:分配给改状态的动画片段

Foot IK:是否对此状态应用到Foot IK

Mirror:作为动画镜像使用

Translations:该状态的转换列表。这边显示了一个转换。

右击某个状态,选择Set As Default ,改状态图标将显示棕黄色。意味着是状态机第一个激活时播放的状态。

任意状态是一种始终存在的特殊状态,可以作为一个转换的起始点,快速转换到需要转换到的目标状态。任意状态不能作为转换的终点。

3、状态转换

在某个状态上右键选择Make Transform 可以增加一个状态转换。两个状态之间会有一个连接线。点击连接线,如下图所示

启用Solo表示从该状态进行的其余转换将不能使用。

启用Mute表示禁用改转换。

Atomic 表示是否启用原子转换。启用表示无法中断转换。

下面的是状态转换之间的融合情况。

Conditions用于控制在什么时候进行状态转换。

Exit Time 表示退出时间,0.88表示idle动画播放了88%的时候进行状态转换。

4、动画参数

动画参数可以在Animator界面的左下角的参数(Parameters)进行设置。如下图

参数有四种基本类型。Float、Int、Bool和Trigger。

对应函数分别是SetFloat、SetInt、SetBool、SetTrigger。

在完成参数的增加后,便可以在状态转换中使用。

如,参数isRun是Bool型。

那么在状态run->状态idle时,可以在转换的Conditions进行如下配置。

而在状态idle->状态run时,可以在转换的Conditions进行如下配置。

猜你喜欢

转载自blog.csdn.net/u010848412/article/details/79282344