【Unity基础】6.动画状态机
大家好,我是Lampard~~
欢迎来到Unity基础系列博客,所学知识来自B站阿发老师~感谢
(一)Animator Controller组件
(1)创建组件
Animator Controller组件是unity用于控制管理动画状态的组件。什么是状态机,为什么引入这个概念呢?
一个角色可能存在着跑,跳,站立,攻击等多种动画状态,若在以往,我们可以通过代码来创建并切换角色不同的动作,但是这样一来增加了程序的工作量,二来并不直观,美术要看到实机效果(比如奔跑动画切攻击动画)需要程序把资源打入到包体,把代码写好才能测试。
因此unity提供了这个组件,让美术同学编辑器中就可以管理不同状态下的动画展现,并且看到实际效果;让程序同学只需要关注不同状态下的变量变化,不需要管理动画的增删
只需要右键create,选中Animator Controller就可以创建一个动画管理器组件
(2)动画状态编辑界面
双击我们创建的Animator Controller,就可以打开动画编辑界面,我们能够看到初始的Animator Controller都会自带三个状态,分别是Any State, Entry和 Exit
Any State状态
表示任意状态的特殊状态。例如我们如果希望角色在任何状态下都有可能切换到死亡状态,那么Any State就可以帮我们做到。当你发现某个状态可以从任何状态以相同的条件跳转到时,那么你就可以用Any State来简化过渡关系
Entry状态
表示状态机的入口状态。当我们为某个GameObject添加上Animator组件时,这个组件就会开始发挥它的作用。
如果Animator Controller控制多个Animation的播放,那么默认情况下Animator组件会播放哪个动画呢? 由Entry来决定的。
但是Entry本身并不包含动画,而是指向某个带有动画的状态,并设置其为默认状态。被设置为默认状态的状态会显示为 橘黄色
Exit状态
表示状态机的出口状态,以红色标识。如果你的动画控制器只有一层,那么这个状态可能并没有什么卵用。但是当你需要从子状态机中返回到上一层(Layer)时,把状态指向Exit就可以了
(二)动画状态
(1)新增&删除&重命名动画状态
如果看不懂上面三个初始状态的简介那木有关系,因为我们会从头开始学习
首先就是创建和删除了,在动画状态编辑器中,右键create state就可以创建一个动画状态。选中动画状态,右键delete就可以删除(初始的三个状态删不了哟)
其次如果你想给一个状态重命名,只需要选中这个状态,在右侧的Inspector属性面板中找到名字属性修改就可以了
(2)动画状态的属性
在动画面板中我们可以看到状态还有以下的属性,不用太纠结,在日后肯定会用到它们的,现在我们可以简单的看一下介绍:
(3)动画状态的联系
动画状态之间会有联系,比如受击状态后接死亡,比如前摇状态后接攻击。这些状态的联系,unity会用transition来定义这组关系,而在状态编辑器中,会用一个线段的指向来呈现
像上图我们就给state1和state2做了一个双向的联系,意味着S1可以转换成S2,S2也可以转成S1,它们的联系在右侧属性面板中的transtions记录着,若是想删除它们的联系,那么在transtions中删除即可
我们知道entry会指向初始的动画状态,比如现在默认就是指向S1状态,那如果我想让S2作为初始状态,只需要选中S2状态,右击Set as default state即可
(三)挂上状态动画
(1)创建动画animation
上面巴拉巴拉一大堆,可能就有读者大大开始吐槽:这个和动画有神马关系???
莫急!!终于要到关键的步骤给状态挂上动画了。首先是创建一个简单的animation,比如我们给之前的直升机,加上上升的动画,简单编辑一下其Y轴随时间变化增加;
(2)添加动画至状态motion
选中我们要挂在的动画状态,然后把创建好的动画拖动至motion属性栏中就可以挂上了
点击运行看看,动画状态从entry进入到State1,然后就播放fly动画。而我们的直升飞机就飞起来了~
若此时加一个动画状态State2,让State1在播放完毕后进入到State2会怎么样呢?
正如我们所想,此时fly动作被播放一遍以后就进入到state2,因为state2没有定义其他的motion动画,因此直升机就呆呆的不动了