1、输入
Input.GetAxis()值从0渐变到1或-1,Input.GetAxisRaw()值从0变化到1或-1,没有渐变。
2、Animator
在脚本里实现OnAnimatorMove回调函数时,Animator组件上的ApplyRootMotion会被屏蔽。
AnimatorOverrideController可以复写动画控制组件。
【100个 Unity实用技能】☀️ | Unity 复用动画控制器 Animator Override Controller 的简单使用-腾讯云开发者社区-腾讯云
一、要引用某个参数或者状态时,使用HashID更高效。即切换动画状态时,不要用SetFloat(string,float)这样的形式,要用SetFloat(int,float)这样的形式。第一个参数为string类型的话,系统会遍历Animator去查找这个名字的变量,效率低。
int speedHash = Animator.StringToHash("Speed");//Speed是下图左边声明的变量
int jumpHash = Animator.StringToHash("Jump");//Jump是下图左边声明的变量
int runStateHash = Animator.StringToHash("Run");//Run是下图右边定义的动画状态
anim = GetComponment<Animator>();
anim.SetFloat(speedHash ,1f);
//获取当前动画状态信息
AnimatorStateInfo info = anim.GetCurrentAnimatorStateInfo(0);//默认层BaseLayer索引值为0
if (info.shortNameHash == runStateHash)//当前为Run动画状态
if (info.IsName("Run"))//当前为Run动画状态 IsName()内部用了StringToHash
//获取当前动画过渡信息
AnimatorTransitionInfo info = anim.GetCurrentAnimatorTransitionInfo(0);//默认层索引值为0
shortNameHash:当前动画名称
fullPathHash:包含层级路径的当前动画名称
二、StateMechineBehaviour动画脚本
Unity5.0新特性------动画的StateMachineBehaviours状态机_onstateenter_星际行走的博客-CSDN博客
unity 5以上版本都可以给某个层或某个动画状态创建一个StateMechineBehaviour动画脚本。选择层的空白地方或者选中某个动画状态,右边会出现"AddBehaviour"按钮,就可以创建脚本了。
常用的是OnStateEnter、OnStateUpdate、OnStateExit这三个函数,分别表示"进入动画"、"动画更新"、"离开动画"。
通过给每层添加StateMechineBehaviour动画脚本,就可以对Animator动画进行分层管理。
如何让StateMechineBehaviour脚本调用MonoBehaviour脚本中的成员呢?例如对于BaseLayerSMB.cs脚本和AnimatorTest.cs脚本,进行如下操作就可以在BaseLayerSMB中调用AnimatorTest脚本中的函数了。
三、创建动画状态
除了创建动画状态,还可以创建子动画状态,双击子动画状态可以进行编辑。
3、动画分层
1.动画分层的介绍
可对角色动画实行分层来达到不同的效果,如射击游戏中键盘控制角色下半身走跳等功能,鼠标移动控制角色上半身旋转身体。还有角色一边行走一边打招呼这种效果。
2.动画分层的创建与AvataMask的使用
动画每层需要设置权重,表示当层动画在最终动画效果中占的比重。可以通过代码来获取和设置指定动画层的权重。
Sync选项表示复制一个一样的动画层,复制的动画层会跟被复制的动画层同时调用,但是可以使用其它的AvataMask文件。例如左手动画层使用了LeftArm这个AvataMask文件播放左手挥手动画,右手动画层是左手动画层勾选了Sync选项而复制出来的,右手动画层使用了RightArm这个AvataMask文件,当左手挥手时右手也会同步跟着挥手。双方的wave动画状态中分别播放左手挥手动画和右手挥手动画。Timing选项可以看博客研究。
勾选IK Pass就可以使用反向动力学,脚本中会调用OnAnimatorIK回调函数。
第一种方法:选择角色模型,找到动画下面Mask选项,可以拷贝其它的AvataMask文件,或者点开Humanoid,设值角色哪些部位可以使用,鼠标点击空白地方人会变红表示都不可用,再点击右手部分,表示这个右手可用,同时点击动画层中的齿轮图标,设置Blending模式为Additive(叠加)模式。
第二种方法:鼠标右键创建一个AvataMask文件RightArm,设置右手可用,然后在动画层中设置对应的AvataMask文件,Blending模式设置为override。AvataMask文件除了有Humanoid选项设置控制区域外,还可以使用Transform选项设置具体哪些骨骼受控制,例如一些非人类的尾巴、翅膀等。
3.多层动画的配置
4.Layers分层
5.BlendTree混合
6.IK反向动力
7.Event&Curve事件与曲线的应用