发布网友 发布时间:2023-05-18 18:45
共1个回答
热心网友 时间:2023-10-06 06:08
选中 Animator Controller文件,点击 Open 即可打开控制器面板
新创建一个 Animator Controller 默认是没有任何状态的
需要自己创建空状态,并进行相应设置
创建一个状态后,我们需要给该状态改名(为了区分状态),并指定一个动作 Motion
这里我创建的是 站立,所以就需要找到对应的 Idel 动画,指定给 Motion
通过参数来对动画进行改变
AnyState :任何状态都可以进入此状态,包括自身。用于死亡等相似的状态。
表示任意状态的特殊状态,以蓝色标识,例如我们如果希望角色在任何状态下都有可能切换到死亡状态,那么Any State就可以帮我们做到。当你发现 某个状态可以从任何状态以相同的条件跳转到 时,那么你就可以用Any State来简化过渡关系。
Entry:当前状态机入口
表示状态机的入口状态,以绿色标识。当我们为某个GameObject添加上Animator组件时,这个组件就会开始发挥它的作用。之前也说过一个Animator Controller用于控制多个Animation的播放,那么默认情况下Animator组件会播放哪个动画呢? ——这就是由Entry决定的。但是Entry本身并不包含动画,而是指向某个带有动画的状态,并设置其为默认状态。被设置为默认状态的状态会显示为 橘*。当然,你可以随时在任意一个状态上通过 鼠标右键->Set as Layer Default State 更改默认状态。记住, Entry 在Animator组件被激活后 无条件 跳转到默认状态,并且每个Layer 有且仅有一个 默认状态。
Exit,:表示状态机的出口状态
以红色标识。如果你的动画控制器只有一层,那么这个状态可能并没有什么卵用。但是当你需要从子状态机中返回到上一层(Layer)时,把状态指向Exit就可以了。
Parameters标签页中的内容可以说是Animator必需的,包含了我们在Animator中使用的所有“参数”。在拥有多个动画短片的控制器中,正是通过Parameters中的参数实现了不同动画间的转变。
切换到Parameters标签页后,我们可以通过点击“+”创建4中类型的参数,它们分别是Float、Int、Bool和Trigger。前三个都比较好理解,均属于基本数据类型。最后一个Trigger则是一个与Bool类似的参数,同样拥有True和False两种状态。但是不像Bool在设置为True后会一直维持,Trigger在被触发后会迅速重置为未触发状态。这个特性在设置动画转变时非常实用。
除了包含特定动画的状态,状态机更少不了充当不同状态间纽带关系的Transitions,直观上说它们就是连接不同状态的 有向箭头。
举个例子:
以上图为例,我们已经创建了三个自定义状态Idle, Walk 和Run,并且Idle已经被设置为初始状态(以橙色表示)。所以Animator组件生效时会一直处于Idle状态,如果在Animation Clip的属性中勾选了 “Loop Time”,那么该动画会循环播放,否则播放一次GameObject就会停止。这种效果在GameObject是背景的大树,花草什么的就够用了,因为它们都不会动。但是我们的主角大部分情况下还是需要移动的,所以我们机智地也准备好了走路(Walk)和奔跑(Run)两种动画。不过Unity还没有智能到在物体移动的时候自动跳转到名为“Walk”的状态上,所以这个切换的时机还是需要我们控制的。记得我们之前说的Parameters面板嘛?它们就是在这里排上用场的。
让我先暂时假定一种方案:
那么我们可以定义两个Parameter来模拟过渡条件:
状态间的过渡关系可能有五种:
要创建一个从状态A到状态B的过渡,直接在状态A上 鼠标右键单击 > Make Transition并把出现的箭头拖拽到状态B上点击鼠标左边即可。而设置对应于某个过渡关系的过渡条件,直接选中过渡线并在Inspector窗口中的Conditions属性一栏添加即可(添加的条件为&&关系,即必须同时满足)。
注参考: https://blog.csdn.net/qq_28849871/article/details/77914922