Unity知识的一些补充

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

        三、创建动画状态

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

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

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事件与曲线的应用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值