Unity知识的一些补充

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脚本中的函数了。

三、创建动画状态

Unity动画系统详解10:子状态机是什么? - 知乎

        除了创建动画状态,还可以创建子动画状态,双击子动画状态可以进行编辑。

猜你喜欢

转载自blog.csdn.net/qq_34256136/article/details/133108350