tips:如标题所说,这篇文章主要详细的讲解unity的动画系统,足够让想要用动画系统制作3D游戏的同学进行一个还不错的项目制作,我这篇文章不讲原理,只讲最真实以及最新的技术
话不多说,直接开始
1.unity动画组件
目前unity关于动画的组件有以下两种

第二种我们忽略,在这里贴出来只做了解,因为Animation是老式动画系统(要学就学新技术)
第一种Animator动画系统主要依靠动画控制器进行驱动(下面详细讲解动画控制器),可以依靠一个组件灵活驱动不同的动画,甚至是两个动画一起驱动
下面介绍组件内容:
Controller:这是动画控制器选项,将制作好的动画控制器拖入其中就可以驱动挂载组件的主角动起来
Avatar:这是人物骨骼放置的地方(目前高版本unity将制作好动画的模型拖入场景后会自动生成Animator组件自动绑定此选项)
这两个是主要选项,如果出现动画畸形或者骨骼方面的问题直接进行检查
一般新拖入场景的人物想要他动起来只需要添加一个动画控制器即可
2.动画控制器
上面说了那么多,现在来讲一下最关键的动画控制器(Animator Controller)
在我们的Peoject中右键选择Create选择Animator Controller

新建后会出现一个动画控制器组件(Animator Controller)

双击后会出现以下界面

现在动画控制器有了,我们要怎么让自己的动画动起来?
在资源窗口点击你的模型,如果你的模型带有动画(一般叫Animation Clip)
将他拖入以上的窗口(如果可以拖入说明你拖对了,不然试试别的)
如果你的模型下没有什么东西可以拖入的话那就去 鞭策你的美工是不是根本没有给动画给你
下面简单的让动画动起来
首先拖入的动画会自动为默认动画,灰自己跟Entry进行一个链接

这就是最简单的动画控制器做好了,现在把你资源中创建的动画控制器拖入场景中人物的Animator组件的动画控制器选项(上面讲过了)
启动后你会发现角色动起来了
因为在动画控制器中我们主要用到Entry和Exit(开始和结束)
在项目启动的时候Animator组件会自动启动动画控制器的Entry(开始)
然后Entry根据连接的动画进行播放
你发现动画播放一遍没动静了,那我要做待机动画或者走路动画怎么办??
这就和动画控制器没有关系了,我们需要去到模型本身,在资源管理中点击你动画对应的模型(一般都是模型加动画一起给你)

看到下面有个Loop Time
英语好的同学已经知道这个是干嘛的了,勾选他,你会发现你的动画循环播放了
现在你一个动画已经启动了,但是我前面说了可以是多个动画一起控制,下面来进行深入的讲解
3.多个动画播放控制
你再次拖入几个动画,会发现他是灰色的

因为你没有链接,就等于脚本中写了方法但是不调用
这时候你右键灰色的动画点击图中第二个选项(设置为默认)

你发现Entry链接到你新导入的动画了,启动项目后人物进行的是新导入的动作
这就是设置开始游戏的时候的默认动画
现在你想先进行第一个动画在进行第二个动画,右键确定被播放的动画选择上面的第一个选项,将线连接到第二个动画
再次启动项目你会发现播放完第一个动画后播放第二个动画
这里注意,如果一直循环播放第一个动画那你看看是不是第一个动画设置了循环(上面讲的)
动画一直循环代表没有结束,所以不会跳转到下一个动画
上面讲完了动画控制器中动画的连接以及播放,下面详解通过代码控制动画的播放
4.代码控制动画控制器
下面的内容涉及到动画链接引擎的核心,将由一个简单的例子来进行讲解
举一个简单的例子,人物按住w循环走路动画,松开变成待机动画,按空格播放一下跳跃动画
这涉及到代码中最简单的两个检测概念,布尔和触发
我们需要给动画控制器变量,来检测是否播放某个动作或者是否触发某个动作
第一步:在动画控制器右上角点击Paramaters

点击加号出现以下选项

浮点型,数值型,布尔,触发
上面两种涉及到复杂的判定,我们主要讲解项目两种来完成我们的案例
首先是由开局待机循环

待机可转变为走路

创建bool变量

在动画控制器中调用bool变量
点击待机和走路中间的线,在监听监听事件部分点击加号,将创建的是否走路bool值添加进去

当IsWalk为True的时候触发走路循环动作(走路动作事先设置循环)
接下来创建脚本,就在主角的脚本中进行动画的设置

获取到主角身上的动画控制组件
接下来通过代码修改刚才设置的bool值

可以看到用的是动画组件自带的SetBool,当然还有SetInt和SetTrigger等等
框中第一参数为变量名称,第二个参数为传参数值(变量名称一定不能错)
当这行代码运行后刚才我们在上面设置的变量IsWalk就变为true
在事件监听处监听的这个变量的动画就回开始进行判定,你会发现开始播放走路动画
如果想要松开W让他变为待机动画只需要在从走路连接一根线到待机动画,然后监听变量并设置变量为False即可
这就是通过代码控制动画切换
一样的在创建变量位置现在Trigger,修改变量名

在代码中编写

运行这一行代码后会进行一次触发,然后自动回调
在动画控制器中将待机和走路动画都通过相同的方式连接到跳跃动画,代表这两种动作都可以转到跳跃
在动画监听处进行监听(跳转到跳跃的那两根线)

通过运行上面的代码可以播放跳跃动画
但是你发现跳跃动画完成后不动了,那么就再给跳跃动画拉一条线,拉回待机动画(默认不操作时的状态)
这个时候会发现跳跃完成后自动回到待机,如果你是按住w跳跃后又会从待机自动回到走路动画

动画完成了,但是你发现每次都要等上一个动画播放完才能进行触发到别的动画,这样肯定不行,我们需要设置不需要等待动画播放完毕就直接跳转,只需要一个设置

打开这个界面,勾选Has Exit Time,你发现可以及时反应了(所有连接处都要设置)
unity有个强大的功能,明明你这两个动画的动作是衔接不上的,但是在unity中就是可以自动补动作让他变得自然
5.动画融合
在动画链接设置界面你可以看到如上图所示的时间轴,可以看出来两条动画重叠的部分就是他们融合的部分
那么怎么让他们融合的更加自然呢?
时间轴上有一段蓝色的区域,拖动两遍的箭头可以设置区域的大小和位置,也就是融合的时间长短,动画融合的越长当然越自然,但是融合的太长会让原本的动作变形,可以根据实际情况适当调整
6.动画分离
接下来讲到最后一点
我们知道有些游戏主要是上半身动而下半身的动作不变,如枪战类游戏,上半身开枪换子弹,下半身走路或者跳跃,听起来好想要做很多套动画来进行适配,其实不用
角色的上半身和下半身其实可以分开进行动画的,如上半身换子弹,开枪,下半身只负责走路动画
在我们的左上角打开Layers设置

这里设置的是动画的层,点击加号新建一个层,我命名为上下层

在资源管理器中新建一个Avatar Mask,点击他打开Humainoid会出现以下界面

现在我们只需要上半身,那么点击下半身的部分让它变成红色

这样一个预制的告诉动画控制器此层只负责上半身动画的控制器就做好了
点击UP层旁边的小齿轮,将创建的Avatar Mask拖入进行赋值

这样UP层的动画就只会在上半身进行显示,同样的方法设置Down层然后重新设置下半身动画,这就是动画分离
课外:
还有个小知识点,我们进行动画配置一般都要是同一套骨骼做出来的,那怎么让不同骨骼的动画可以互相使用呢
这时候就需要一个桥梁,unity就刚好有这个桥梁功能
我们在资源管理器中找到做好动作的模型,点击后在Inspector中更改设置
在Rig标签下,AnimationType改为Humanoid
点击Apply

然后点击Configure...按钮出现以下界面

这就是unity自带的骨骼系统
因为我们知道只要同一个骨骼制作的动作才能适配,所以unity给不同的角色换位同一个骨骼
选框中是原本的骨骼部件对unity的骨骼进行一个绑定,可以挨个查看绑定是否出问题,确定绑定没出问题后就代表成功绑定一个动作
接下来对另一个角色的动作做相同的操作,做完后你发现这两个角色的对应的动画可以互相使用了
重点:确保模型没有变形切只有设置过的动画才能互相使用