本文主要介绍Unity Animation状态机Animator的使用教程,有需要的朋友可以参考,希望对读者朋友有所帮助。
: 目录
1.前言2。动画师组件3。动画控制器文件4。动画剪辑文件5。状态机State)1。任何状态状态状态2。进入状态3。退出状态6。动画状态7的属性。状态之间的转换。添加状态控制参数IX,编辑切换状态X的条件,控制代码中的状态XI,检查动画状态方法I,AnimatorStateInfo方法II,继承StateMachineBehaviour XII,控制回放速度XIII,注意I取消检查2个动作循环。3.一般都是想马上切换,所以这里不要查十四,补一,Mirror2二,Solo,Mute。
一、前言
Unity可以通过两种方式控制动画。
1动画,这种方式简单,可以通过play(“idle”)或者Corss fade(“idle”)直接播放动画;
2动画师,Unity5.x之后推荐这个方法,因为可以在里面加入混合动画,让动画切换更流畅。
二、Animator组件
当你在动画窗口中通过Create New Clip(快捷键为Ctrl 6)创建动画时,一个动画师已经悄然出现在相应的GameObject上。
三、Animator Controller文件
在第一步中生成的Animator组件上,创建Animator时已经指定了第一个控制器参数。你可以点击值,切换到项目窗口,你会发现这个控制器对应的文件是一个. Controller文件。
动画师控制器就是动画控制器,负责不同动画之间的切换,是制作动画效果必不可少的原件。
注意,你也可以通过GameObject上的Add Component来添加一个全新的Animator组件,但是这种情况下,Animator的Controller参数默认为空,所以我们需要手动拖拽准备好的。控制器文件到参数位置,以便动画控制器可以正常工作。
四、Animation Clip文件
双击。controller 文件,会弹出一个Animator窗口,显示动画控制器文件的所有内容(也可以通过顶部工具栏的Window-Animator打开这个界面)。
在项目窗口中右键单击并选择创建-动画以创建动画剪辑(。动画文件)
然后拖动。anim文件放入Animator窗口,作为Animator控制器的状态。
Animator创建的动画剪辑不能通过挂动画组件直接播放。如果强制播放,控制台会报告一条警告消息:
动画组件“XXX”使用的Animation clip“XXX”必须标记为Legacy。
和提示消息。
在附加动画列表中找不到默认剪辑
如下
为什么?
如果我们将检查器切换到调试模式
您可以看到动画剪辑有一个传统复选框。
Legacy的意思是遗留,即通过动画组件播放动画片段的传统方式。如果使用动画组件来播放动画剪辑,则必须检查Legacy,但这种方式已经过时。建议使用Animator播放动画片段。
五、 状态机的状态(State)
每个Animator控制器都有三种状态:任意状态、进入和退出。
1、Any State状态代表任何状态的特殊状态。例如,如果我们希望角色能够在任何状态下切换到死亡状态,那么Any State可以帮助我们做到这一点。当你发现某个状态在相同条件下可以从任意状态跳转,那么你就可以用Any State来简化转移关系。
2、Entry状态指示状态机的进入状态。当我们给GameObject添加一个Animator组件的时候,这个组件就开始发挥作用了。
如果Animator控制器控制多个动画的回放,那么Animator组件默认会播放哪个动画?是入口决定的。
但Entry本身并不包含动画,而是指向一个有动画的状态,并将其设置为默认状态。设置为默认状态的状态将以橙色显示。
当然,你可以随时通过鼠标右键改变默认状态-设置为层默认状态。
记住,Entry在Animator组件激活后无条件跳转到默认状态,每一层只有一个默认状态。
3、Exit状态指示状态机的退出状态,用红色标识。如果你的动画控制器只有一层,那么这个状态可能就没用了。但是当你需要从子状态机返回到上一层的时候,只要把状态指向退出就可以了。
六、动画状态的属性
我们可以选择一个自定义状态,并在检查器窗口下观察其属性。
属性名
形容
移动
对应于该状态的动画。每个状态的基本属性可以直接从定义的动画剪辑中选择。
速度
动画播放的速度。默认值为1,表示速度是原动画的1.0倍。
钳子
检查右侧参数后可用,即计算速度时考虑区域1中定义的参数。如果选择的参数是平滑的,动画播放速度的计算公式是平滑*速度* FPS(在动画剪辑中指定)。
镜子
仅适用于人形动画(人形动画)
周期偏移
范围为0-1.0的周期用于控制动画开始的偏移。和正弦函数的偏移量对比一下就明白了,正弦函数只会影响初始动画的播放位置。
足部IK
仅适用于人形动画(人形动画)
写入默认值
最好保持默认。有兴趣的话可以参考官方手册。
过渡
由该状态向其他状态发起的转换列表包含两个参数,Solo和Mute,它们在预览状态机的效果时起作用。
添加行为
用于将“行为”添加到状态。
七、状态间的过渡关系(Transitions)
直观来说,它们是连接不同状态的方向箭头。
要创建从状态A到状态B的转换,直接单击鼠标右键-在状态A中进行转换,拖动出现在状态B的箭头,然后单击鼠标左键。
八、添加状态控制参数
有参数Float,Int,Bool,Trigger。
Float,Int是用于控制动画状态的参数,如速度和方向,可以用数字量化。
Bool用于控制动画状态的过渡,例如从行走到奔跑,
Trigger本质上是一个bool类型,但默认为false,当程序设置为true时,会自动变回false。
这里,创建一个Int参数AnimState,如下所示
九、编辑切换状态的条件
点击连接,可以在Inspecter窗口设置,可以在条件栏下添加条件,如下图所示。
当AnimState为0时,将执行从任何状态到新动画2的转换。
您必须在参数面板中添加参数才能在此处查看它们。其次,增加的条件是“与”的关系,即必须同时满足。
十、代码中控制状态
我们可以通过代码设置条件状态来达到动画切换的目的。
动画师ator=go1。getcomponentinator();
阿托尔。SetInteger(AnimState ,0);
上面的代码使参数AnimState为0,满足从任意状态到New Animation2的过渡条件,从而实现New Animation2动画的过渡。
十一、检查动画状态
方法1、AnimatorStateInfo向脚本中添加代码
//检查跳转动画是否正在播放。
AnimatorStateInfo state info=anim。GetCurrentAnimatorStateInfo(0);
bool playingJump=stateinfo。IsName(“jump”);
如果(玩跳跃)
{
if(state info . normalized time 1.0f)
{
//正在播放。
}
其他
{
//播放结束
}
}
Stateinfo。当处于跳转状态时,IsName(jump )返回true。
方法2、继承StateMachineBehaviour动画师的每个状态都可以安装一个脚本并创建一个脚本,该脚本继承自StateMachineBehaviour类,用于检测状态机中动画的运行状态。
官方举例:3359 docs . unity 3d . com/script reference/statemachinehobvior . html
将脚本挂载在对应的状态上即可。代码如下
使用系统。收藏;
使用系统。集合。泛型;
使用联合工程
公共类跳转状态:状态机器行为
{
私人游戏对象玩家;
覆盖青少年时期上的公共void(Animator Animator,AnimatorStateInfo stateInfo,int layerIndex)
{
//正在演奏的状态的第一帧被调用
调试. log(-onsteenter-);
}
//在青少年时期和OnStateExit回调之间的每个更新帧上调用OnStateUpdate
覆盖public void onsteupdate(Animator Animator,AnimatorStateInfo stateInfo,int layerIndex)
{
}
//当转换结束且状态机完成对此状态的评估时,调用OnStateExit
覆盖public void onsteexit(Animator Animator,AnimatorStateInfo stateInfo,int layerIndex)
{
//转换到另一个状态的最后一帧被调用
调试. log(-onsteexit-);
}
//在鼓舞者之后立即调用OnStateMove .OnAnimatorMove()
覆盖公共状态移动时无效(Animator Animator,AnimatorStateInfo stateInfo,int layerIndex)
{
//在OnAnimatorMove之前被调用
}
//在鼓舞者之后立即调用OnStateIK .奥南马托里克()
覆盖statek上的公共void(Animator Animator,AnimatorStateInfo stateInfo,int layerIndex)
{
//在奥南马托里克之后调用,用于在播放状态时的每一帧的单一行为。
//需要注意的是,OnStateIK只有在状态位于具有反向动力学通道的层上时才会被调用。
//默认情况下,图层没有反向动力学通道,所以这个函数不会被调用
//关于反向动力学的使用,可以看看这篇文章《Animator使用IK实现头部及身体跟随》
//https://www . jinshu . com/p/ae6d 65563 EFA
}
}
十二、控制播放速度
动画师ator=go1 .getcomponentinator();
var stateinfo=ator .GetCurrentAnimatorStateInfo(0);
if(stateinfo .IsName(Jump ))
{
阿托尔。速度=2;
}
十三、注意事项
1 取消勾选可以过渡到自我,不然动画会出现抖动
2 动作循环。不然如果没有下个状态切换,直接停止动作
3.一般我们要的都是立即切换,所以这里 不要勾选有退出时间,如果勾选了,则表示在该动作完成后才允许切换,
十四、补充
1、Mirror镜像,可以反转当前动画,减少动画师工作量
2、Solo与Mute无声的相当于把目标过渡禁用掉独奏。表示只生效这一条过渡
可以多选,当选中后会出现箭头提示
条件满足优先于独奏/静音,当条件没有满足时依然不会过渡
以上就是关于一致动画状态机鼓舞者使用教程的详细内容,更多关于一致动画状态机鼓舞者使用的资料请关注我们其它相关文章!