动画系统-Animator详解

1、Animator


  • Unity 中为我们提供了而全面的动画设计解决方案,用来完成游戏对象的动态效果的控制和创建

  • 我们想要一个人物模型动起来,非常简单

  • 只需要在人物的游戏对象上添加 Animator 组件

  • 然后创建一个 Animator Controller 来控制对应的游戏对象的动画 Animator 即可
    图片


    image.png

2、Animator Controller ——动画控制器面板

选中 Animator Controller文件,点击 Open 即可打开控制器面板

新创建一个 Animator Controller 默认是没有任何状态的

需要自己创建空状态,并进行相应设置


image.png

3、加入动画

创建一个状态后,我们需要给该状态改名(为了区分状态),并指定一个动作 Motion

这里我创建的是 站立,所以就需要找到对应的 Idel 动画,指定给 Motion


image.png

4、状态切换 -> 动画切换

通过参数来对动画进行改变

三种状态:

AnyState :任何状态都可以进入此状态,包括自身。用于死亡等相似的状态
表示任意状态的特殊状态,以蓝色标识,例如我们如果希望角色在任何状态下都有可能切换到死亡状态,那么Any State就可以帮我们做到。当你发现 某个状态可以从任何状态以相同的条件跳转到 时,那么你就可以用Any State来简化过渡关系。

Entry:当前状态机入口
表示状态机的入口状态,以绿色标识。当我们为某个GameObject添加上Animator组件时,这个组件就会开始发挥它的作用。之前也说过一个Animator Controller用于控制多个Animation的播放,那么默认情况下Animator组件会播放哪个动画呢? ——这就是由Entry决定的。但是Entry本身并不包含动画,而是指向某个带有动画的状态,并设置其为默认状态。被设置为默认状态的状态会显示为 橘黄色。当然,你可以随时在任意一个状态上通过 鼠标右键->Set as Layer Default State 更改默认状态。记住, Entry 在Animator组件被激活后 无条件 跳转到默认状态,并且每个Layer 有且仅有一个 默认状态。

Exit,:表示状态机的出口状态
以红色标识。如果你的动画控制器只有一层,那么这个状态可能并没有什么卵用。但是当你需要从子状态机中返回到上一层(Layer)时,把状态指向Exit就可以了。

除了上述三个自带的状态,Animator Controller的主角还是我们人为添加的各种状态。你可以把这些自定义的状态看做一个 盛放动画的容器 ,它们可以表示一个准备好的动画效果,并且可以在这些Animation Clip上“添油加醋”,再做一些只适用于当前动画控制器的处理。创建一个自定义状态可以通过在区域3中的任何空白区域 鼠标右键->Create State->Empty来实现。我们可以选中某个自定义状态,并在Inspector窗口下观察它具有的属性:

image.png

参数:

Parameters标签页中的内容可以说是Animator必需的,包含了我们在Animator中使用的所有“参数”。在拥有多个动画短片的控制器中,正是通过Parameters中的参数实现了不同动画间的转变。

切换到Parameters标签页后,我们可以通过点击“+”创建4中类型的参数,它们分别是Float、Int、Bool和Trigger。前三个都比较好理解,均属于基本数据类型。最后一个Trigger则是一个与Bool类似的参数,同样拥有True和False两种状态。但是不像Bool在设置为True后会一直维持,Trigger在被触发后会迅速重置为未触发状态。这个特性在设置动画转变时非常实用。

image.png

6、Transition(过渡)

除了包含特定动画的状态,状态机更少不了充当不同状态间纽带关系的Transitions,直观上说它们就是连接不同状态的 有向箭头。
举个例子:

image.png

以上图为例,我们已经创建了三个自定义状态Idle, Walk 和Run,并且Idle已经被设置为初始状态(以橙色表示)。所以Animator组件生效时会一直处于Idle状态,如果在Animation Clip的属性中勾选了 “Loop Time”,那么该动画会循环播放,否则播放一次GameObject就会停止。这种效果在GameObject是背景的大树,花草什么的就够用了,因为它们都不会动。但是我们的主角大部分情况下还是需要移动的,所以我们机智地也准备好了走路(Walk)和奔跑(Run)两种动画。不过Unity还没有智能到在物体移动的时候自动跳转到名为“Walk”的状态上,所以这个切换的时机还是需要我们控制的。记得我们之前说的Parameters面板嘛?它们就是在这里排上用场的。

让我先暂时假定一种方案:

  1. 物体在玩家按下方向键时开始步行(Walk),并且速度会一直上升;
  2. 物体在速度达到10.0时会播放奔跑(Run)动画;
  3. 玩家松开方向键后回到静止(Idle)状态。

那么我们可以定义两个Parameter来模拟过渡条件:

  1. isMove, bool类型, 用于判断用户是否按下按键;
  2. moveSpeed, float类型, 用于判断GameObject的速度是否达到10.0。

状态间的过渡关系可能有五种:

  1. Idle -> Walk, 条件为 isMove=true
  2. Walk -> Idle, 条件为 isMove=false
  3. Walk -> Run, 条件为 moveSpeed > 10.0
  4. Run -> Walk, 条件为 moveSpeed < 10.0
  5. Run->Idle, 条件为 isMove=false

要创建一个从状态A到状态B的过渡,直接在状态A上 鼠标右键单击 > Make Transition并把出现的箭头拖拽到状态B上点击鼠标左边即可。而设置对应于某个过渡关系的过渡条件,直接选中过渡线并在Inspector窗口中的Conditions属性一栏添加即可(添加的条件为&&关系,即必须同时满足)。

关于Conditions的设置有几点注意事项还是需要说明一下:首先必须在Parameters面板中添加了参数才可以在这里查看到,其次添加的条件为&&”与”关系,即必须同时满足。

image.png

注参考:https://blog.csdn.net/qq_28849871/article/details/77914922

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容