找回密码
 立即注册
查看: 282|回复: 0

Unity Animator Animation详解及应用实例教程

[复制链接]
发表于 2021-11-7 14:38 | 显示全部楼层 |阅读模式
刚刚在草稿箱里发现一堆草稿。。。修改一下赶紧发出来。。。
名词解释

什么是animation

本质上讲,动画就是以时间帧的方式记录物体某一时刻的状态,然后按一定顺序与时间间隔进行切换。所有软件的动画原理都是如此。
什么是Animator

animator,就是unity 用于管理多个动画播放状态的管理器,它允许你通过拖拽的方式管理你的动画顺序与触发条件。从而实现复杂的动画或交互效果。
然而,animator最最有魅力的地方,在于它对动画的融合、过度处理。这一点会在稍后讲到。
Animator界面简介

打开方式: unity 上方工具栏 > Window > Animation > Animator


这个就是默认的界面了。主要包含3部分。即图层区、参数区、动画控制区
1,Layers 图层区


点击Layers标签即可切换到图层区。图层用于动画重叠或隔离。这和photoshop的图层概念差不多。
动画隔离是你可以通过权重或判断图层动画运行状态,来指定播放某图层中的动画来实现隔离效果。
动画重叠则是最重要的部分,让不同的动画同时运行。比如在移动中的动画添加出拳攻击动作,就属于手脚动画的融合。
添加、删除图层

左键点击图层右边加号可以添加图层,右键点击图层,然后选择Delete就可以删除图层。
设置图层

左键拖拽图层最前面的按钮可以修改图层的顺序。左键点击涂岑右边的齿轮按钮,可以进入图层的设置页。双击图册图层名即可设置图层名称

Weight:权重,用于调整当前图层中动画对目标物体的影响程度。0是毫无影响,1是完全影响。如果多个图层都为1,那么就会进自动行动画平均融合
Mask:设置骨骼遮罩。设置当前图层对对象的哪部分起作用
sync :快速创建一个与原动画相同的状态
IK Pass:是否使用反最用力。力反馈系统
2参数区


点击Parameters进入参数区。
Animator的参数主要用于动画控制。比如动画的播放状态。
点击右边的加号即可添加参数。参数类型分为浮点、整形、布尔、触发四种类型。其中比较特殊的就是Trigger参数。每次使用脚本调用该参数时,就会触发一次相关动作。
游戏中的移动、攻击、施法等动作的触发条件都是在这里设置的。比较值得注意的就是输入时如果使用的时Aix方式,即递增衰减输入法。 那么在离开按键的时候,按键值可能不为0,这样如果在动作判定的范围内时,会多次触发。所以这里记得要处理一下。
3 动画控制区


动画控制区以功能模块的形式管理动画的运行逻辑。即一个模块代表一个动画或是一个状态。通过设置模块间的连接来实现设置动画的状态。
动画生命周期模块

动画的生命周期用于控制动画的启动和退出状态。当控制器到达某种状态时,就会启动相应的模块。
Any State:无论动画启动还是结束都会触发这个模块
Entry:动画启动时会运行该模块
Exit:动画结束时会运行该模块
动画控制器

创建控制器菜单

在空白处点击右键 >


几个按钮的功能分别是:
Create State: 创建动画控制器。用于指定动画
Empty:创建一个空的动画控制器。用于设置单个动画
FromSelected clip:从已选择的动画创建新的模块
From New Blend Tree: 创建动画混合树。用于设置需要线性过度的多个动画混合器。
Create Sub-State Machine:创建动画集 。动画集就是一个容器。包含一个逻辑画布。
Copy current StateMachine:将当前所在的动画集,复制在剪切板中
Paste:从剪辑板粘贴动画集或动画控制器到画布中
值得一提的是,当我们单击任何一个模块,按ctrl+c ctrl+v都可以实现复制粘贴的功能。
比较关键的功能就创建空动画控制器Empty、动画混合树Blend Tree、以及动画集合Sub-State Machine。
标准动画控制器Empty

创建好一个动画模块后,点击这个模块Inspector中就会显示相关的设置

Motion:动画文件或指定的动画状态机
Speed:动画播放速度
MotionTime:动画时间
Mirror:勾选后会镜像播放。比如你
Foot IK:勾选后开启足部IK。脚部会跟随地面角度而产生变化
Transition:在这个列表中,显示所有与此模块有关系的父或子模块。点击列表中的某项,就会显示两个模块的过渡设置


红框部分:是连接关系选择列表。
蓝框部分:是两个动画模块间的过渡设置。所有的改变都会直接在下方的时间轴显示。

红框内是当前帧的位置。preview中会显示当前的动作。
蓝框所在就是动画时间。下方相同的块,就是另一段动画的时间轴位置
拖拽紫色部分,用于设置两个动画切换时的过度。这个范围越大,两段动画就会被融合的越平滑。黄框内的灰色的部分,是不会播放的部分。也就是说,也可以通过设置这个,来达到剪切动画头尾的效果。你有可能会问,如果你想去掉动画中间的某个部分怎么办。。。组合使用就好了啊
紫框部分:是参数设置。如果当前动画是动画混合树(Blend tree),那么这里就会显示混合树的参数。
下方是动画的启动条件设置。相关参数实在参数区实现设置好的。
动画模块连接


右键某个模块即可弹出连接菜单。
Set Statemachine Default State:这个是Entry模块专有设置。他决定一个动画集,启动时,默认播放的模块。一个动画集必须有一个default statie连接。
Make Transition: 点击该项后,再点击目标模块即可完成两个模块间的连接。


点击连线中间的三角按钮,Inspector面板上就会出现从一个模块到另一个模块的触发条件等设置。相关设置参数含义在上方已经有所介绍了



blend tree

行为混合树,用于混合多个动作,制作过度。特别适合连贯的动作。比如移动切换。
blend tree里面比较重要的一个设置就是 blend type


blend type:
1D:适合a->b->c …的相邻的两个动作过度。无法从a过度到c。用这个来实现前后左右的移动,相邻的两个方向都可以过度比如向左向前,但相反方向的是无法过度的。比如向前向后。
2D simple Directional:在平面直角坐标系中输入xy两个参数,来决定任意两个方向上的动作融合。可以a>b,a>c。可以实现前后左右移动的无缝过度。但无法实现在同一方向上的多个动作点过度。
2D freeform directional:相比上一个可以实现更复杂的动画过度了。支持任意方向的多个动作过度。
Animation Event

animation event 是animator所控制的动画animation中的事件帧。
AnimationEvent相关的使用方法可以参见这篇教程https://blog.csdn.net/lengyoumo/article/details/110957550

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-24 22:29 , Processed in 0.165433 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表