• 【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编辑器,可以快捷预览和创建动画片段

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

    该动画系统中常见的术语

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

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

    2 游戏对象的Animator组件

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

    组件属性

    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就组成一个动画片段):

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

    3.2 动画片段的创建

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

    3.3 创建Animation编辑窗口

    ctrl+6直接创建 

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

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

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

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

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

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

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

    3.4 进行片段的编辑

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

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

    Samples 1秒的动画帧数

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

    Add Property 添加属性

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

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

    4 动画控制器

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

    创建和使用

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

    • 将控制器挂到Animator上

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

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

    5 动画状态机

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

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

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

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

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

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

    更改Entry动画片段

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

    如果想要更改

    双击进入Animation Clip中查看属性

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

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

    参数1:Has Exit Time

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

    参数2:Exit Time

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

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

    参数2:Fiexd Duration

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

    参数3:Transition Duration

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

    参数4:Transition Offset

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

    参数5:Interruption Source

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

    实例

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

    效果:

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

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

    5.3 Blend Tree 混合树

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

    创建

    状态机窗口中右键Create State -> Blend Tree,可以创建一个混合树,双击进入编辑。

    页面参数

    左侧➕可以添加变量

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

    角色行走实例

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

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

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

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

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

    效果

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

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

  • 相关阅读:
    设计循环双端队列
    SpringBoot application.properties 详解
    DDS:domain
    视频监控智能分析系统
    简单理解精确率(Precision),召回率(Recall),准确率(Accuracy),TP,TN,FP,FN
    webrtc Native C++视频旋转/裁减/绿屏问题
    科技视界杂志科技视界杂志社科技视界编辑部2022年第18期目录
    [本人毕业设计] 别踩白块_计算机科学与技术_前端H5游戏毕设
    【Kyuubi】Apache Kyuubi 1.8 特性解读
    b2b b2c c2c o2o区别是什么
  • 原文地址:https://blog.csdn.net/qq_41835314/article/details/126263641