我们这一章要学习,让人物跑动的时候播放动画,并且在站立的时候也能有一个Idle(人物站立不动的时候所播放的动画),而不是一直保持这个不动的姿势,我们可以游览一下我们这个人物的动画,点开我们人物的文件夹,然后找到“Animations”

unity3d人物动起来 unity3d人物动画_游戏引擎

 我们可以点击游览这些Animation(动画),

unity3d人物动起来 unity3d人物动画_浮点_02

 如果你的人物是一个未渲染出来的紫色的人形,那么我们就得点这个“其他”,然后选择我们的人物模型,设置好以后就可以正常展示了,然后播放一下我们就可以游览了,这些Animation里有人物站着不动的时候的Idle,有人物缓慢行走的“wake”,有跑步的时候的动画“run”,那么我们就要将我们的这些动画添加到我们人物的“Animator controller”里面来,我们现在来操作一下叭!选中我们的player之后,我们可以看见这个人物本身是带有这个Animator的插件的:

unity3d人物动起来 unity3d人物动画_unity3d人物动起来_03

 因为我这用的素材是自带的prefab,它这里面本来就带有这个组件,如果没有的话,也可以在下面这个“add component”,添加上这个组件

unity3d人物动起来 unity3d人物动画_unity3d人物动起来_04

 那我们要创建一个Animator的controller了,创建之前,我们要先将我们这个人物保存为一个prefab,这样方便我们以后的更改和使用,创建一个新的文件夹,取名就叫Prefabs,然后我们把我们的人物拖拽放到这个文件夹里面

unity3d人物动起来 unity3d人物动画_string类_05

 这时候它会弹出一个窗口:

unity3d人物动起来 unity3d人物动画_拖拽_06

 我们选择“original prefabs(原来的预制体)”,然后我们回来改一下我们人物的名字就叫“Player”。然后我们要开始创建animator controller了,新建文件夹名为:Animations,文件夹底下再创建一个文件夹叫Animator,然后我们在Animator文件夹底下创建一个新的Animator Controller

unity3d人物动起来 unity3d人物动画_string类_07

 我们给它取名就叫“Player”

unity3d人物动起来 unity3d人物动画_unity3d人物动起来_08

 我们就将这个Player拖拽到人物的Animator插件中:

unity3d人物动起来 unity3d人物动画_浮点_09

unity3d人物动起来 unity3d人物动画_拖拽_10

 接下来我们就要打开我们这个Animator窗口

 

unity3d人物动起来 unity3d人物动画_unity3d人物动起来_11

如果你没有这个窗口,也可以在这里打开

unity3d人物动起来 unity3d人物动画_拖拽_12

  要打开animator窗口而不是animation,打开以后就是这样一个基本的情况

unity3d人物动起来 unity3d人物动画_string类_13

 那么我们现在要使用一个方法,我们要创建一个“Blend tree”

科普:BlendTree主要作用: 把几个类似的动画片段合成复合的动画片段,可以说相当于一个动画合成器

然后我们要创建这么一个混合树, 鼠标右击屏幕

unity3d人物动起来 unity3d人物动画_游戏引擎_14

添加新的混合树,这样的话我们这个混合树就会被设置为默认的动画了,双击这个混合树,我们可以编辑这个混合树,我们先给这个混合树改个名字,就叫LocoMotion,双击进来混合树,那我们现在就要开始来设置这个bleed tree了

在这个 bleed tree创建的时候呢,它会默认创建一个品如“参数”

unity3d人物动起来 unity3d人物动画_拖拽_15

 一开始这个参数中默认创建了一个参数我们可以将它删除然后我们自己设置一个参数,我希望我的这个bleed tree可以根据我人物的移动来切换它的移动动画,然后我们创建一个参数,类型为float

unity3d人物动起来 unity3d人物动画_游戏引擎_16

 

 然后我们给它取名就“Speed”,要留意,我们在命名的时候,如果你习惯使用首字母小写,那么你要保证你所有的参数最好都是小写字母开头的,因为这个参数我们通常在代码当中都是要string类型去调用的,如果你大小写拼错的话,会出现问题,那么接下来我们选中这个bleed tree 在右侧的这个“Paramerter”这里下拉菜单选择“Speed”

 

unity3d人物动起来 unity3d人物动画_拖拽_17

然后添加三个Motion,因为速度越来越快,所以动画应该是第一个“不动”的时候的动画

第二个是走路的时候

第三个是跑步的时候,

我们去到我们人物的animations那里,将我们要用的动画拖拽放置到Motion里面。那我们现在要使用代码去实现这个动画在人物上的应用了。

返回我们的“PlayerController”,既然我们要控制我们的animator,那么我们就要先获得我animator(动画)的控制器,那么我们用Animator这个类去定义一个控制器,名字就叫anim(注意这个Animator这个单词不要拼错了,注意它单词和Animation这个单词的区别),定义好这个控制器以后,那么现在我们就要在Update中去让我们这个控制器获得“Animator”这个插件了,获得了这个插件以后,我们就能获得我们刚刚添加到animator的动画了:

unity3d人物动起来 unity3d人物动画_string类_18

 和agent获得导航插件的方法一样

anim=GetComponent<Animator>();

那么现在我们就已经获得了这个插件的动画了,那么现在我们就要写一个方法来实时的切换我们的这个动画,那么实时切换动画,我们要放在Update函数中去调用运行,所以我们把Update函数写回来,那么我们现在要写一个动画切换的方法,给它起名就叫SwitchAnimation,那在这里,我们要将这个插件里的“Speed”设置到和我们人物速度同步,因为我们这个Speed是一个浮点类型的,所以我们可以使用anim.SetFloat()函数,第一个参数就是要同步参数的名称Speed,因为我们调用Speed是用一个string类型的去弄的,所以这里第一个参数要写成string类型,也就是("Speed"),第二个参数就是所要同步的人物速度参数,如何获得这个人物的速度呢?我们可以用agent底下的velocity直接去获得人物的速度值,因为我们的Speed是一个浮点数,所以我们要将这个获得的人物的速度值转换成浮点类型,我们可以直接就用sqrMagnitude,这样我们就可以将我们这个Vector3类型的值转换成浮点类型的值传回来了,别忘了写完这个函数,我们还要回到Update函数中去调用,那么我们写到这样我们保存代码返回我们的Unity项目(如果你想手动调整我们的人物动画播放的起始速度的话,你可以把这个勾勾取消然后自己在这里设置:

unity3d人物动起来 unity3d人物动画_string类_19

 

 

 那现在我们人物就可以实现站在它能动动,跑步也有跑步的样子了,那这就基本就实现了这样的功能了。