1、输入
Input.GetAxis()值从0渐变到1或-1,Input.GetAxisRaw()值从0变化到1或-1,没有渐变。
2、Animator
一、要引用某个参数或者状态时,使用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脚本中的函数了。
三、创建动画状态
除了创建动画状态,还可以创建子动画状态,双击子动画状态可以进行编辑。