Unity 2D——Animator 动画状态机的使用方法

2022年4月24日 1228点热度 4人点赞 0条评论

前言

对于同一个精灵,会有多种状态,在不同的状态下呈现不同的动画效果,这是动画状态机的作用。

简单来说比如角色移动,上下左右四个方向的的移动动画一般是不一样的(有的会是一样的,但那关我什么事?),要在角色朝不同方向移动的时候播放不同的动画。

Animator Controller

在之前的博文 [从零开始的Unity 2D——Animation(帧动画)]() 中有提到如何简单的创建 Animation文件,创建时会自动的创建Animator Controller 文件,并且会自动与精灵做绑定。

如果需要手动的创建与绑定,那么需要以下步骤:

  1. 在资源窗口右键菜单 create -> Animator Controller 。
  2. 在资源窗口找到创建的Animator Controller,然后拖拽置需要绑定的精灵。也可以在精灵的inspector window中手动设置。
添加动画到 Animator Controller

Animator_Controller_test

这是初创建Animator Controller在Animator window中见到的样子,如果是使用拖拽素材到精灵生成的Animator 应该会多出动画的方块,本质上是编辑器自动把动画加进来了,没有什么区别。

这些方块表示控制器的状态,如果处于动画的状态那么就会播放动画。

Animator_Controller_test2

如图,将一个名为run_back的动画添加到了Animator Controller中(拖拽到窗口中即可),橙色代表这是这个控制器的默认状态,这个时候运行游戏场景,那么一定是在播放run_back动画的。

第一个添加的动画会默认设置为默认状态,后续添加的动画方块应该都是灰色的,也可以通过右键菜单中的 set as layer default state选项将其他的动画设置为默认动画,但是默认动画只能有一个。

连线

上图 Entry 和 run_back之间有一条连线,这表示状态转换的时候,可以从Entry转换到run_back。

右键菜单中的Make Transition 可以增加状态转换的连线。

Any State

它表示任意状态,与它连线的动画,在任何状态下都可以转换过去。

Entry

Animator Controller 可以分层,这个状态就是进入该层的一个初始状态,所以默认状态都会与它连线。

当然,如果只有一层,可以将它理解为状态转换的入口。

Exit

它也与分层有关系,在状态退出这个层级,返回上一层的时候,就是从这里退出的。

状态转换的机制

状态与状态之间的连线是为了约束状态之间相互转换的规则,主要是规定是否运行从一个状态切换到另一个状态。

那么状态是如何被切换的呢?

animator_controller_1

首先需要Parameters window中新建一个变量(多个也行),它是为了生成状态转换的条件。

变量的类型有 float、int、Bool、Trigger 可选,不过Trigger我确实没有明白是个什么东西,暂时不表。

animator_controller_2

然后为Animator Controller 添加一个动画,生成状态过度连线,点击连线可以编辑状态过度的一些规则。

在condition 列表中添加之前新建的变量,然后设置状态转换的条件。

这样设置成功之后,当State == 1时,就会播放run_left的动画了。

有几个需要注意的点:

  1. 变量设置转换条件时,有几个选项可选,这是条件运算符
    1. Greater 大于
    2. Less 小于
    3. Equals 等于
    4. Not Equals 不等于
  2. 有多个变量是也可以添加多个转换条件,当所有条件都满足时,会触发状态转换
  3. 关于一些转换的参数
    1. solo 与 Mute 选项 ,solo表示只允许有一条状态转换,mute表示禁用状态转换
    2. Has Exit Time ,如果勾选这个选项,那么在状态发生转换时不会立即转换到下一个状态,而是会播放完成当前动画,之后再转换状态。
动画状态的Inspector window

Animator_Controller_test3

  • Motion 动画状态对应的动画文件
  • Speed 动画播放的速度
  • Mirror 勾选会镜像播放动画

小结

动画状态转换有两个条件:

  1. 满足在condition中设置的转换条件
  2. 当前状态允许向下一个状态转换

必须两个条件都满足的情况下动画状态才会转换

大脸猫

这个人虽然很勤快,但什么也没有留下!

文章评论