当前位置:网站首页>【Unity入门计划】Unity2D动画(1)-动画系统的组成及功能的使用
【Unity入门计划】Unity2D动画(1)-动画系统的组成及功能的使用
2022-08-11 02:31:00 【flashinggg】
目录
Unity动画
- 直接在Unity中制作动画
- 从外部软件导入制作好的动画
- 代码制作动画
这里主要讨论的是如何利用Unity引擎中的工具,制作动画。Unity中的动画制作,是基于它的动画系统的。
1 Unity动画系统:MEcanim
Mecanim动画系统(一) - 知乎 (zhihu.com)
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,创建过渡条件,过渡条件有以下属性:
实例
例如我给项目中创建的角色对象添加动画片段并做了以下过渡条件:
效果:
但是会发现:它只是均匀的在两个动画片段间转换,并没有按照走路的逻辑正常转身。
这个时候,我们就需要混合树来实现伴随走路转身的效果。
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的动画系统,之后伴随脚本代码编写部分会再开一个博客单独讲述。
边栏推荐
猜你喜欢
[The method of calling the child page from the parent page of the iframe] Stepping on the pit: It is the key to use `[x]` when getting elements. You cannot use `.eq(x)`, otherwise it will not be obtai
Detailed explanation of new features of ES advanced function syntax
google搜索技巧——程序员推荐
一次简单的 JVM 调优,拿去写到简历里
Detailed explanation of common methods of filtering matrix (array) elements in Matlab
FPGA learning column (xinlinx) serial communication -
学军中学推理社2017届招新试题
TRCX:掺杂过程分析
The practice of alibaba data synchronization component canal
Section 4-6 of the first week of the second lesson: Appreciation of medical prognosis cases + homework analysis
随机推荐
软件测试面试题:谈谈你对 cmm 和 is9000 的认识?
基于FPGA状态机的自动售货机功能实现
微信公众号后台管理
软件测试面试题:性能测试工作?
如何解决高度塌陷
MySQL权限控制、分区表、快速复制表
shell脚本入门
Gaussian beam focused by thermal lens
Mask RCNN 网络详解
花甲的思考
qtcreator调试webkit
13.cuBLAS开发指南中文版--cuBLAS中的Level-1函数copy()和dot()
混币器Tornado遭制裁 对DeFi市场意味着什么?
【备战“金九银十”】2022年软件测试面试题最新汇总
网络安全笔记第四天day4(kali基本操作)
Alibaba 最新神作!耗时 182 天肝出来 1015 页分布式全栈手册太香了
Lianshengde W801 series 5-WeChat applet and W801 Bluetooth communication routine (read notes)
软件测试面试题:缺陷等级应如何划分?
Detailed explanation of new features of ES advanced array function syntax
Ninjutsu_v3_08_2020-安全渗透系统安装