> 技术文档 > Unity学习--动画基础--[Animator动画状态机]Animator Controller动画控制器(状态机)_untiy 状态机

Unity学习--动画基础--[Animator动画状态机]Animator Controller动画控制器(状态机)_untiy 状态机

·来源于唐老狮的视频教学,仅作记录和感悟记录,方便日后复习或者查找


一、有限状态

1.什么是有限状态机

·有限是指可以表示的状态是有限度的

2、有限状态机对于我们的意义

经常应用于动作系统以及AI系统

3、最简单的状态机实现

最简单的状态机就是swicth,根据简单的输入,切换到不同的状态从而切换到不同的逻辑

4、总结


二、Animator动画状态机的创建

1.给物体创建时自动创建

选中物体、点击创建、保存到文件

我们就可以看到物体被挂上了Animator脚本,同时自动给我们创建了一个Animator文件

同时点进去发现它这里有一个橙色的矩形,这个就是我们刚刚创建的动画了,表示一个【状态】

2.手动创建动画状态机文件

直接在文件夹里右键找到他然后创建

但是这里面还没有动画


三、Animator动画状态机的基础使用

1.初识动画状态机窗口

左侧面板

层级之间是否覆盖或者融合,跟点开齿轮后的这个Weight有关,为1则会覆盖其他层的

参数页签中点击➕号可以添加四种参数

右侧面板

2.添加动画

自动添加

手动添加1

注意:不要用老动画文件

不然会警告⚠你的,加上了也不会播放的

直接拖进去就好了

这个矩形的一个参数就关联到了这个动画文件(矩形的名字和动画名字可以不一样)

手动添加2

或者先创建一个矩形,再把动画拖进去这个矩形的参数中就好了

3.添加切换连线

在矩形上【右键】

长出一个箭头来移到其他矩形上就好了

会发现这个连线是有很多参数的

正在播放的动画是会有这种蓝色进度条显示的

当然两个状态可以都连接上,这样它们就会在播完之后立刻播下一个,于是在这两个状态之间循环播放了

还可以把任意一个状态设置为默认状态,【右键】点击这个【设置为本层默认状态】即可

4.添加与设置切换条件

这样子添加条件

燃点击箭头线,这里有一个Condition,可以按+号给他添加条件

可以切换不同的参数

同时每个参数对应的条件都有所不同

这里如果是 【floatValue】【Greater】0的意思就是:当floatValue这个参数大于0的时候,就会执行这个箭头线指向的状态切换

是0就切换不了

但是改成0之后就可以切换过去了

less同理

还可以同时添加多个条件,不过注意这里条件是要都满足才会执行切换操作,而不是满足其中之一

对于trigger,可以发现它没有任何可以设置的条件,这是因为这个参数是一次触发的,即每次触发之后就会失活。就是它可以设置为True,但是只要这个箭头切换过一次之后,这个就会重新变回False了

一开始激活它

切换过去之后立刻设为False了。所以可看成一种特殊的布尔值

一般用于这种有双向连线的,即1状态在trigger触发后会执行切换到Test状态,之后Test状态执行完后自动切换回去的时候,这个时候如果trigger没有再次触发的话还是会一直停在1状态。


四、代码控制动画状态机切换

好啦,在掌握了上面如何创建动画与使用动画状态机的界面操作的知识之后,我们可以开始尝试用代码来控制状态机的切换了

首先准备两个简单的状态并加入切换连接和切换条件

1、关键组件Animator

参数相关

目前最重要的就是这个参数了

2、Animator中的API

2.1通过状态条件切换动画

设置值

就是通过设置改变里面的条件参数的值

得到值

或者得到条件参数的值(然后可以根据相应的值进行一些逻辑判断)

注意

这个连线里这个参数【Hash Exit Time】会导致每次切换一定要等待当前动画播完才会进行切换,即使状态满足,所以会使得切换有点延迟的感觉,因此如果要条件改变之后立刻切换,那就要取消这个的勾选

2.2直接切换动画(特殊情况采用,一般不用)

注意:这里面填的是状态名,也就是Animator窗口中那些矩形的名字,它不是动画的名字


五、其他

在Animator里,即使在一个状态里有的帧没有K上,但是另一个状态里有K其他的帧,那切换的时候它也会自动还原回去。这就比老动画系统先进多了