一 系统简介
Mecanim 动画系统是 Unity 公司从 Unity4.0 之后开始引入的新版动画系统,它提供了如下四种功能。
- 为 Unity 的所有元素(包括对象、角色和属性)提供简单工作流程和动画设置。
- 支持 导入的动画剪辑 以及 Unity 内创建的动画
- 人形动画 重定向 - 能够将动画从一个角色模型应用到另一角色模型。
- 对齐动画剪辑的简化工作流程。
- 方便预览动画剪辑以及它们之间的过渡和交互。因此,动画师与工程师之间的工作更加独立,使动画师能够在挂入游戏代码之前为动画构建原型并进行预览。
- 提供可视化编程工具来管理动画之间的复杂交互。
- 以不同逻辑对不同身体部位进行动画化。
- 分层和遮罩功
其工作流程分为下面几个阶段:
(1) 模型准备以及导入:通过第三方建模工具完成
(2) 角色设置:人形角色设置(Humanoid)和通用角色设置(Generic)
(3) 让角色运动:动画剪辑,状态机,混合树,动画参数控制
二 核心组成
在 Unity 中,想要为一个游戏物体(GameObject)添加动画效果,我们可以直接为它添加 Animator组件(注意,此处是 Animator而非 Animation)。而在每个 Animator组件中都会调用一个 Animator Controller(动画控制器),每个 Animator Controller又会引用多个 Animation Clip。
以上黑体字基本包含了 unity 动画系统中三个比较重要的概念。下面自下而上讲解。
首先是最基础的 Animation Clip,可以看作是动画系统中最小的单位,游戏中角色的跑步,跳跃,摔倒都可以用一个完整的 Animation Clip 表示,可理解为动画短片。这些动画短片可以自己创建,也可以导入外部的资源。最方便的是直接导入 Unity Asset Store 上的资源,更多的时候是从游戏美工收到这些资源,通常是和游戏模型一起打包的,例如 FBX 格式的文件,可能就包含了人物模型,对应动画短片和骨架。
其次,我们还需要一个文件来部署和管理所有相关的 Animation Clip,即 Animator Controller,可理解为动画控制器。Animator Controller 中定义了如何从一个动画状态跳转到另一个动画状态,每个动画状态对应一个动画短片。即使只有一个动画状态,动画控制器也是必需的。
当拥有了一个 Animator Controller,就可以把它加到某个角色的 Animator 组件上控制角色的动作了,这里要注意的是 Animator Controller 和 Animation Clip 都是文件(File),Animator 则是 GameObject 上的一个组件(Component),不能混为一谈。
下面是 Unity 官方文档中给出的三者的关系:
2.1 Animator 组件
通过 Animation
窗口(快捷键是 command+6
) 中的 Create New Clip
创建 Animation时,一个 Animator已经悄无声息地出现在了对应的 GameObject上
2.2 Animator Controller 文件
在上一步中生成的 Animator组件上, 第一个 Controller参数在创建 Animator 时已经被赋值了,可以点击该值,并切换到 Project窗口下,会发现这个 Controller对应的文件是一个**.controller**文件。
Animator Controller就是动画控制器,负责在不同的动画间切换,属于制作动画效果的必备原件。
注意,也可以通过
GameObject
上的Add Component
添加一个崭新的Animator
组件,但是这种情况下Animator
的Controller
参数默认为空,所以需要我们手动将事先准备好的.controller
文件拖拽到该参数位置,动画控制器才能正常工作。
状态机的状态(State)
每个 Animator Controller
都会自带三个状态:Any State
, Entry
和 Exit
。
1、Any State 状态
表示任意状态的特殊状态。例如如果希望角色在任何状态下都有可能切换到死亡状态,那么 Any State 就可以做到。当某个状态可以从任何状态以相同的条件跳转到时,那么就可以用 Any State 来简化过渡关系。
2、Entry 状态
表示状态机的入口状态。为某个 GameObject 添加上 Animator 组件时,这个组件就会开始发挥它的作用。
如果 Animator Controller 控制多个 Animation 的播放,那么默认情况下 Animator 组件会播放哪个动画呢? 由 Entry 来决定的。
但是 Entry 本身并不包含动画,而是指向某个带有动画的状态,并设置其为默认状态。被设置为默认状态的状态会显示为 橘黄色。
可以随时在任意一个状态上通过 鼠标右键->Set as Layer Default State
更改默认状态。记住,Entry
在 Animator
组件被激活后 无条件 跳转到默认状态,并且每个 Layer
有且仅有一个默认状态。
3、Exit 状态
表示状态机的出口状态,以红色标识。如果动画控制器只有一层,那么这个状态可能并没有什么用。但是当需要从子状态机中返回到上一层(Layer
)时,把状态指向 Exit
就可以了。
动画状态的属性
我们可以选中某个自定义状态,并在 Inspector
窗口下观察它具有的属性
属性名 | 描述 |
Motion | 状态对应的动画。每个状态的基本属性,直接选择已定义好的动画(Animation Clip)即可 |
Speed | 动画播放的速度。默认值为 1,表示速度为原动画的 1.0 倍。 |
Mutiplier | 勾选右侧的 Parameter 后可用,即在计算 Speed 的时考虑 区域 1 中定义的某个参数。若选择的参数为 smooth, 则动画播放速度的计算公式为 smooth * speed * fps(animation clip 中指定) |
Mirror | 仅适用于 humanoid animation(人型机动画) |
Cycle Offset | 周期偏移,取值范围为 0-1.0,用于控制动画起始的偏移量。把它和正弦函数的 offset 进行对比就能够理解了,只会影响起始动画的播放位置。 |
Foot IK | 仅适用于 humanoid animation(人型机动画) |
Write Default | 最好保持默认,感兴趣可以参考官方手册 |
Transitions | 该状态向其他状态发起的过渡列表,包含了 Solo 和 Mute 两个参数,在预览状态机的效果时起作用 |
Add Behaviour | 用于向状态添加“行为” |
2.3 Animation Clip 文件
双击 .controller"
文件,会弹出一个 Animator
窗口,该窗口中显示的就是动画控制器文件中的所有内容(也可以在顶部的工具栏通过 Window - Animator
打开这个界面)
在 Project
窗口右键单击,选择 Create->Animation
创建 Animation Clip
(.anim
文件)