【Unity入门计划】Unity2D动画(1)-动画系统的组成及功能的使用

目录

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中制作动画
  • 从外部软件导入制作好的动画
  • 代码制作动画

这里主要讨论的是如何利用Unity引擎中的工具,制作动画。Unity中的动画制作,是基于它的动画系统的。

1 Unity动画系统:MEcanim

Mecanim动画系统(一) - 知乎 (zhihu.com)

动画系统概述 - Unity 手册

Unity有一个丰富、复杂的动画系统(Unity4.0后以后引入了动画系统MEcanim),这是一套基于动画状态机的动画控制系统,是一个面向动画应用的动画系统,这个系统提供了以下功能:

  • 针对人形角色提供了一套特殊的工作流,创建分身Avatar、肌肉调节Muscles
  • 人形动画重定向(Retargeting),能够将动画从一个角色模型应用到另一个角色模型上
  • 提供了可视化的Animator编辑器,可以快捷预览和创建动画片段

【Unity入门计划】Unity2D动画(1)-动画系统的组成及功能的使用_第1张图片

  • 更加方便地创建动画状态机和状态之间Transition地转换
  • 提供了BlendTree混合树功能

该动画系统中常见的术语

在进一步学习前,先将Unity中各部件名称及其作用罗列出来,便于理解和查找:

  • AnimationClip:动画片段,用于角色或者简单动画的动画数据
  • Animator Controller:动画控制器
  • BodyMask:身体遮罩,控制包括/排除身体的某个部位的动画
  • AnimationCurve:动画曲线
  • Avatar:骨骼,是骨架重定向的一个接口
  • Retargeting:将动画从一个角色模型应用到另一个角色模型上
  • AnimationLayer:动画层,一个动画层包含一个动画状态机,起点一般都是基础层Base Layer
  • AnimationSateMachine:动画状态机
  • BlendTree:混合树,基于Float类型参数对相似的动画片段进行混合

2 游戏对象的Animator组件

Unity中,如果想给某个角色对象添加动画,需要添加Animator动画组件。

【Unity入门计划】Unity2D动画(1)-动画系统的组成及功能的使用_第2张图片

组件属性

Controller 控制器

该对象挂接的动画控制器Animator Controller

Avatar 骨骼

防止模型的骨骼

Apply Root Motion 根动画

bool量,勾选它会根据动画产生实际的位移

Update Mode 更新模式

  • Normal:使用Update进行更新
  • Animate Physics:使用FixUpdate更新
  • Unscale Time:无视timescale更新

Culling Mode 剔除模式

  • Always Animate:摄像机看不到,动画依然继续
  • Cull Update Transform:摄像机看不见则不更新,但位置更新有
  • Cull Completely:摄像机看不到,不更新动画也不更新位置,直接不动

3 Animation Clip 动画片段

Animation Clip动画片段是Unity动画系统的基础。动画片段包含了对象如何随时间变化其位置、旋转或其他属性的信息,每个片段可以被认为是一个单一的线性记录。

3.1 Unity中动画片段&Sprite

拿我在学习的项目举例,项目资源提供了现成的人物动画,是以sprite精灵的方式提供了每个动画片段帧图片(例如红色框框四个sprite就组成一个动画片段):

【Unity入门计划】Unity2D动画(1)-动画系统的组成及功能的使用_第3张图片

如果仔细看可以发现,他是一张囊括了集中片段动作的合集sprite,把他划分成了几个小的sprite:

【Unity入门计划】Unity2D动画(1)-动画系统的组成及功能的使用_第4张图片

3.2 动画片段的创建

有两种方式:外部导入(尚不做过多说明)和引擎内部创建。内部创建提供了Animation编辑窗口,对动画片段进行简单的编辑,可以通过:project窗口 -> Create -> Animation,创建一个新的动画片段。不过我认为单独创建独立的动画片段资源没有什么意义,一般会在对象挂上Animator组件后,打开Animation窗口来创建片段。

3.3 创建Animation编辑窗口

ctrl+6直接创建 

窗口打开的方式其实也不止一种,如果是操作不对会出现无法编辑的问题。 

ctrl+6(window窗口打开)直接打开Animaton窗口,如果提示:

【Unity入门计划】Unity2D动画(1)-动画系统的组成及功能的使用_第5张图片

 说明没有选择想要编辑动画的游戏对象,左键选择一个对象后:

【Unity入门计划】Unity2D动画(1)-动画系统的组成及功能的使用_第6张图片

提示需要创建一个Animator和Animator Clip,点击Create,创建一个动画片段并命名,编辑窗口就可以拖入对应的Sprite了。

【Unity入门计划】Unity2D动画(1)-动画系统的组成及功能的使用_第7张图片

这时候你可以发现,这时引擎自动给当前对象添加了一个Animator组件;自动创建了一个控制器并挂接给了当前对象。

【Unity入门计划】Unity2D动画(1)-动画系统的组成及功能的使用_第8张图片

给Animator组件挂上控制器后再创建

【Unity入门计划】Unity2D动画(1)-动画系统的组成及功能的使用_第9张图片

这里跟上面相比,就直接快进到了创建片段上,其实效果都是一样的。 

3.4 进行片段的编辑

拖入组成片段的sprites,就能创建一个简单的片段了。

【Unity入门计划】Unity2D动画(1)-动画系统的组成及功能的使用_第10张图片

【Unity入门计划】Unity2D动画(1)-动画系统的组成及功能的使用_第11张图片

在场景或对应的perfab都可以预览当前片段的效果。 

【Unity入门计划】Unity2D动画(1)-动画系统的组成及功能的使用_第12张图片

Samples 1秒的动画帧数

修改数值可以调整当前片段的播放速度,默认为60。

Add Property 添加属性

给动画添加属性,有很多属性,这个我认为实际上是给每一个关键帧的精灵对应的对象添加一些属性,比如镜像操作实际上是修改关键帧的Sprite Renderer的Flip参数。

这里仅简单介绍Animation的操作,另外还有预览播放等操作,以及其他更细节的操作以后需要的时候会再介绍。

4 动画控制器

Animator组件中包含了Animator Controller动画控制器属性,用于设置角色的行为,行为包含了SateMachine动画状态机Blend Tree混合树Events通过脚本控制的事件

创建和使用

Project窗口选择储存控制器的文件夹 -> 右键Create -> Animator Controller,创建一个控制器。

【Unity入门计划】Unity2D动画(1)-动画系统的组成及功能的使用_第13张图片

  • 将控制器挂到Animator上

【Unity入门计划】Unity2D动画(1)-动画系统的组成及功能的使用_第14张图片

  • 双击创建的控制器 -> 进入Animator编辑面板,进行控制器的编辑(或者从Window菜单打开)

【Unity入门计划】Unity2D动画(1)-动画系统的组成及功能的使用_第15张图片

如上,我在项目中的Robot对象创建了一个Animator组件,创建了一个控制器命名为Robot,同时双击进入到Animator编辑页面。

5 动画状态机

动画状态机是以图形的方式显示动画的所有状态以及如何从一段动画过渡到另一段动画。

可以发现,每个控制器可以有很多个Layer动画层,基础层是Base Layer,每个动画层都包含一个状态机,如果是新建控制器的状态机,初始状态必定包含一下三个状态单元,且无法删除。

【Unity入门计划】Unity2D动画(1)-动画系统的组成及功能的使用_第16张图片

状态机中可以创建动画片段、动画片段连接以及Blend Tree。

5.1 创建状态单元:挂接Animator Clip

窗口中右键Create State -> Empty,可以创建一个空白的状态单元,Motion可挂接动画片段。或者直接将创建好的动画片段拖入其中快速创建状态单元。

通过Animation编辑窗口挂接的片段也会体现在状态机中。

【Unity入门计划】Unity2D动画(1)-动画系统的组成及功能的使用_第17张图片

更改Entry动画片段

注意,Entry连接的第一个动画片段将表示在动画开始时播放此片段。如果想更改,直接在片段右键,点击set as Layer Default State,就能把当前片段更改为第一个播放的片段了。

如果想要更改

双击进入Animation Clip中查看属性

【Unity入门计划】Unity2D动画(1)-动画系统的组成及功能的使用_第18张图片

5.2 创建动画过渡条件:Make Transition

右键对应的状态单元 -> Make Transition,创建过渡条件,过渡条件有以下属性:

【Unity入门计划】Unity2D动画(1)-动画系统的组成及功能的使用_第19张图片

参数1:Has Exit Time

不依赖参数过渡,依赖指定的具体时间Exit Time进行过渡,选中之后Setting中可以设置具体时间。

参数2:Exit Time

退出时间。勾选了Has Exit Time之后就能用到这个参数了。Exit Time其实是个百分比,通俗点说就是在动画片段播放到这个百分比的时候就会被打断,Exit Time可以理解为打断动画。

【Unity入门计划】Unity2D动画(1)-动画系统的组成及功能的使用_第20张图片

如果是>1的数,效果如下:就变成了循环播放Exit Time后再进入下一个动画

【Unity入门计划】Unity2D动画(1)-动画系统的组成及功能的使用_第21张图片

参数2:Fiexd Duration

固定持续时间,这是一个复选框选项,是一个切换开关,在按照秒显示按照百分比显示之间切换。

【Unity入门计划】Unity2D动画(1)-动画系统的组成及功能的使用_第22张图片

【Unity入门计划】Unity2D动画(1)-动画系统的组成及功能的使用_第23张图片

参数3:Transition Duration

过渡持续时间,是用来过渡动画的。如果这个是百分比,例如是0.5,则表示这个动画播放到一半时就开始过渡动画,当前动画会和下一动画同步播放,实现过渡。

参数4:Transition Offset

过渡抵消,表示从下一位置动画什么位置开始的过渡。 例如当他是0.5时表示在下一动画片段时间轴的50%开始播放。

参数5:Interruption Source

中断来源,用以控制过渡中可能中断的情况。

实例

例如我给项目中创建的角色对象添加动画片段并做了以下过渡条件: 

【Unity入门计划】Unity2D动画(1)-动画系统的组成及功能的使用_第24张图片

效果:

【Unity入门计划】Unity2D动画(1)-动画系统的组成及功能的使用_第25张图片

但是会发现:它只是均匀的在两个动画片段间转换,并没有按照走路的逻辑正常转身

这个时候,我们就需要混合树来实现伴随走路转身的效果。

5.3 Blend Tree 混合树

Blender Tree能实现参数和动画的挂接操作。不同的混合方式和参数设置,可以混合出丰富的动画效果。混合树的类型有1D混合树,2D混合树,多维混合树等,这个在后面的Blend Type中就展示到了。

创建

状态机窗口中右键Create State -> Blend Tree,可以创建一个混合树,双击进入编辑。
【Unity入门计划】Unity2D动画(1)-动画系统的组成及功能的使用_第26张图片

页面参数

左侧➕可以添加变量

【Unity入门计划】Unity2D动画(1)-动画系统的组成及功能的使用_第27张图片

Blend Type决定了当前是1D、2D还是3D的混合树。

【Unity入门计划】Unity2D动画(1)-动画系统的组成及功能的使用_第28张图片

角色行走实例

还是拿上面举例的Robot走路来说,一般走路的动作改变:

  • 如果是同一直线上,可以用值在1和-1变化的变量来改变人物走向;
  • 如果是一个平面上,一般会有一个2维向量去表示走路的方向

这里就用到了2DBlend Tree,变量分别为float类型的x、y表示x方向和y方向的移动速度。由于当前Robot走路有四个朝向,就创建4个Motion,对(x,y)分别赋予不同的值。

会发现,当添加到第二个Motion时,会出现一个平面,将参数可视化出来。 

【Unity入门计划】Unity2D动画(1)-动画系统的组成及功能的使用_第29张图片

赋值的同时,4个Motion对应4个动画片段,右侧状态机窗口中就出现了添加的4个motion。

【Unity入门计划】Unity2D动画(1)-动画系统的组成及功能的使用_第30张图片

效果

【Unity入门计划】Unity2D动画(1)-动画系统的组成及功能的使用_第31张图片

接下来就是与代码结合了。

这里主要介绍Unity的动画系统,之后伴随脚本代码编写部分会再开一个博客单独讲述。

你可能感兴趣的:(Unity学习,unity,游戏,c#)