一 系统简介

Mecanim 动画系统是 Unity 公司从 Unity4.0 之后开始引入的新版动画系统,它提供了如下四种功能。

  • 为 Unity 的所有元素(包括对象、角色和属性)提供简单工作流程和动画设置。
  • 支持 导入的动画剪辑 以及 Unity 内创建的动画
  • 人形动画 重定向 - 能够将动画从一个角色模型应用到另一角色模型。
  • 对齐动画剪辑的简化工作流程。
  • 方便预览动画剪辑以及它们之间的过渡和交互。因此,动画师与工程师之间的工作更加独立,使动画师能够在挂入游戏代码之前为动画构建原型并进行预览。
  • 提供可视化编程工具来管理动画之间的复杂交互。
  • 以不同逻辑对不同身体部位进行动画化。
  • 分层和遮罩功

其工作流程分为下面几个阶段:

(1) 模型准备以及导入:通过第三方建模工具完成

(2) 角色设置:人形角色设置(Humanoid)和通用角色设置(Generic)

(3) 让角色运动:动画剪辑,状态机,混合树,动画参数控制

二 核心组成

在 Unity 中,想要为一个游戏物体(GameObject)添加动画效果,我们可以直接为它添加 Animator组件(注意,此处是 Animator而非 Animation)。而在每个 Animator组件中都会调用一个 Animator Controller(动画控制器),每个 Animator Controller又会引用多个 Animation Clip

Unity 去动画 unity怎么k动画_动画

以上黑体字基本包含了 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 官方文档中给出的三者的关系:

Unity 去动画 unity怎么k动画_Unity 去动画_02

2.1 Animator 组件

通过 Animation窗口(快捷键是 command+6) 中的 Create New Clip创建 Animation时,一个 Animator已经悄无声息地出现在了对应的 GameObject

Unity 去动画 unity怎么k动画_Unity 去动画_03

2.2 Animator Controller 文件

在上一步中生成的 Animator组件上, 第一个 Controller参数在创建 Animator 时已经被赋值了,可以点击该值,并切换到 Project窗口下,会发现这个 Controller对应的文件是一个**.controller**文件。

Animator Controller就是动画控制器,负责在不同的动画间切换,属于制作动画效果的必备原件。

Unity 去动画 unity怎么k动画_状态机_04

注意,也可以通过 GameObject上的 Add Component添加一个崭新的 Animator组件,但是这种情况下 AnimatorController参数默认为空,所以需要我们手动将事先准备好的.controller文件拖拽到该参数位置,动画控制器才能正常工作。
状态机的状态(State)

每个 Animator Controller都会自带三个状态:Any State, EntryExit

Unity 去动画 unity怎么k动画_unity_05

1、Any State 状态

表示任意状态的特殊状态。例如如果希望角色在任何状态下都有可能切换到死亡状态,那么 Any State 就可以做到。当某个状态可以从任何状态以相同的条件跳转到时,那么就可以用 Any State 来简化过渡关系。

2、Entry 状态

表示状态机的入口状态。为某个 GameObject 添加上 Animator 组件时,这个组件就会开始发挥它的作用。

如果 Animator Controller 控制多个 Animation 的播放,那么默认情况下 Animator 组件会播放哪个动画呢? 由 Entry 来决定的。

但是 Entry 本身并不包含动画,而是指向某个带有动画的状态,并设置其为默认状态。被设置为默认状态的状态会显示为 橘黄色。

Unity 去动画 unity怎么k动画_动画_06

可以随时在任意一个状态上通过 鼠标右键->Set as Layer Default State更改默认状态。记住,EntryAnimator组件被激活后 无条件 跳转到默认状态,并且每个 Layer有且仅有一个默认状态。

3、Exit 状态

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

动画状态的属性

我们可以选中某个自定义状态,并在 Inspector窗口下观察它具有的属性

Unity 去动画 unity怎么k动画_Unity 去动画_07

属性名

描述

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文件)

Unity 去动画 unity怎么k动画_动画_08