目录
Unity动画
1 Unity动画系统:MEcanim
该动画系统中常见的术语
2 游戏对象的Animator组件
组件属性
Controller 控制器
Avatar 骨骼
Apply Root Motion 根动画
Update Mode 更新模式
Culling Mode 剔除模式
3 Animation Clip 动画片段
3.1 Unity中动画片段&Sprite
3.2 动画片段的创建
3.3 创建Animation编辑窗口
ctrl+6直接创建
给Animator组件挂上控制器后再创建
3.4 进行片段的编辑
Samples 1秒的动画帧数
Add Property 添加属性
4 动画控制器
创建和使用
5 动画状态机
5.1 创建状态单元:挂接Animator Clip
更改Entry动画片段
5.2 创建动画过渡条件:Make Transition
参数1:Has Exit Time
参数2:Exit Time
参数2:Fiexd Duration
参数3:Transition Duration
参数4:Transition Offset
参数5:Interruption Source
实例
5.3 Blend Tree 混合树
创建
页面参数
角色行走实例
这里主要讨论的是如何利用Unity引擎中的工具,制作动画。Unity中的动画制作,是基于它的动画系统的。
Mecanim动画系统(一) - 知乎 (zhihu.com)
动画系统概述 - Unity 手册
Unity有一个丰富、复杂的动画系统(Unity4.0后以后引入了动画系统MEcanim),这是一套基于动画状态机的动画控制系统,是一个面向动画应用的动画系统,这个系统提供了以下功能:
在进一步学习前,先将Unity中各部件名称及其作用罗列出来,便于理解和查找:
Unity中,如果想给某个角色对象添加动画,需要添加Animator动画组件。
该对象挂接的动画控制器Animator Controller
防止模型的骨骼
bool量,勾选它会根据动画产生实际的位移
Animation Clip动画片段是Unity动画系统的基础。动画片段包含了对象如何随时间变化其位置、旋转或其他属性的信息,每个片段可以被认为是一个单一的线性记录。
拿我在学习的项目举例,项目资源提供了现成的人物动画,是以sprite精灵的方式提供了每个动画片段帧图片(例如红色框框四个sprite就组成一个动画片段):
如果仔细看可以发现,他是一张囊括了集中片段动作的合集sprite,把他划分成了几个小的sprite:
有两种方式:外部导入(尚不做过多说明)和引擎内部创建。内部创建提供了Animation编辑窗口,对动画片段进行简单的编辑,可以通过:project窗口 -> Create -> Animation,创建一个新的动画片段。不过我认为单独创建独立的动画片段资源没有什么意义,一般会在对象挂上Animator组件后,打开Animation窗口来创建片段。
窗口打开的方式其实也不止一种,如果是操作不对会出现无法编辑的问题。
ctrl+6(window窗口打开)直接打开Animaton窗口,如果提示:
说明没有选择想要编辑动画的游戏对象,左键选择一个对象后:
提示需要创建一个Animator和Animator Clip,点击Create,创建一个动画片段并命名,编辑窗口就可以拖入对应的Sprite了。
这时候你可以发现,这时引擎自动给当前对象添加了一个Animator组件;自动创建了一个控制器并挂接给了当前对象。
这里跟上面相比,就直接快进到了创建片段上,其实效果都是一样的。
拖入组成片段的sprites,就能创建一个简单的片段了。
在场景或对应的perfab都可以预览当前片段的效果。
修改数值可以调整当前片段的播放速度,默认为60。
给动画添加属性,有很多属性,这个我认为实际上是给每一个关键帧的精灵对应的对象添加一些属性,比如镜像操作实际上是修改关键帧的Sprite Renderer的Flip参数。
这里仅简单介绍Animation的操作,另外还有预览播放等操作,以及其他更细节的操作以后需要的时候会再介绍。
Animator组件中包含了Animator Controller动画控制器属性,用于设置角色的行为,行为包含了SateMachine动画状态机、Blend Tree混合树、Events通过脚本控制的事件。
Project窗口选择储存控制器的文件夹 -> 右键Create -> Animator Controller,创建一个控制器。
如上,我在项目中的Robot对象创建了一个Animator组件,创建了一个控制器命名为Robot,同时双击进入到Animator编辑页面。
动画状态机是以图形的方式显示动画的所有状态以及如何从一段动画过渡到另一段动画。
可以发现,每个控制器可以有很多个Layer动画层,基础层是Base Layer,每个动画层都包含一个状态机,如果是新建控制器的状态机,初始状态必定包含一下三个状态单元,且无法删除。
状态机中可以创建动画片段、动画片段连接以及Blend Tree。
窗口中右键Create State -> Empty,可以创建一个空白的状态单元,Motion可挂接动画片段。或者直接将创建好的动画片段拖入其中快速创建状态单元。
通过Animation编辑窗口挂接的片段也会体现在状态机中。
注意,Entry连接的第一个动画片段将表示在动画开始时播放此片段。如果想更改,直接在片段右键,点击set as Layer Default State,就能把当前片段更改为第一个播放的片段了。
如果想要更改
双击进入Animation Clip中查看属性
右键对应的状态单元 -> Make Transition,创建过渡条件,过渡条件有以下属性:
不依赖参数过渡,依赖指定的具体时间Exit Time进行过渡,选中之后Setting中可以设置具体时间。
退出时间。勾选了Has Exit Time之后就能用到这个参数了。Exit Time其实是个百分比,通俗点说就是在动画片段播放到这个百分比的时候就会被打断,Exit Time可以理解为打断动画。
如果是>1的数,效果如下:就变成了循环播放Exit Time后再进入下一个动画
固定持续时间,这是一个复选框选项,是一个切换开关,在按照秒显示和按照百分比显示之间切换。
过渡持续时间,是用来过渡动画的。如果这个是百分比,例如是0.5,则表示这个动画播放到一半时就开始过渡动画,当前动画会和下一动画同步播放,实现过渡。
过渡抵消,表示从下一位置动画什么位置开始的过渡。 例如当他是0.5时表示在下一动画片段时间轴的50%开始播放。
中断来源,用以控制过渡中可能中断的情况。
例如我给项目中创建的角色对象添加动画片段并做了以下过渡条件:
效果:
但是会发现:它只是均匀的在两个动画片段间转换,并没有按照走路的逻辑正常转身。
这个时候,我们就需要混合树来实现伴随走路转身的效果。
Blender Tree能实现参数和动画的挂接操作。不同的混合方式和参数设置,可以混合出丰富的动画效果。混合树的类型有1D混合树,2D混合树,多维混合树等,这个在后面的Blend Type中就展示到了。
状态机窗口中右键Create State -> Blend Tree,可以创建一个混合树,双击进入编辑。
左侧➕可以添加变量
Blend Type决定了当前是1D、2D还是3D的混合树。
还是拿上面举例的Robot走路来说,一般走路的动作改变:
这里就用到了2DBlend Tree,变量分别为float类型的x、y表示x方向和y方向的移动速度。由于当前Robot走路有四个朝向,就创建4个Motion,对(x,y)分别赋予不同的值。
会发现,当添加到第二个Motion时,会出现一个平面,将参数可视化出来。
赋值的同时,4个Motion对应4个动画片段,右侧状态机窗口中就出现了添加的4个motion。
效果
接下来就是与代码结合了。
这里主要介绍Unity的动画系统,之后伴随脚本代码编写部分会再开一个博客单独讲述。