【Unity动画】之基础概念

来源:互联网 发布:淘宝怎么装饰店面 编辑:程序博客网 时间:2024/06/14 21:31

   

   1:   animation是以往的动画组件。相当于是一组动画的集合,animator是新的组件,角色与其行为之间的联系纽带。

   2:动画状态机中右键下面的set as layer default state是将该动画转变为默认动画,游戏一加载就播放这个动画


   3:  这是骨骼文件,一套完整的骨骼结构,用于控制角色的动作。



     4: 这是动画文件,        其中的Always Animate是在动画移除摄像机之外后,任然播放动画。


     5:     这是骨骼映射文件,即Avatar。


     6:Animator Controller 文件,这是动画系统很重要的文件,它是状态机的产物,创建它的方法是: 建一个Animator文件夹,然后在里面右键选择创建空的Animator Control文件,双击就可以在状态机中将各个动作相连


     7:在unity中创建动画:导入一个带动画的资源模型,然后要为此模型创建Animator组件,然后给Controller和Avatar两个参数赋值,一定要是对应模型的这两个参数


    8: 每个动作模型都要有 Unity 的人形 Avatar 映射。这样的话所有的动作就属于“同一类型”,这样就可以实现动作文件的共用


    9: 有时我们会遇到行走动画播放了,但并不能让人物向前走,只是在原地移动,这时需要勾选Animator参数中的Apply Root Motion

 

   10: 还有会遇见模型avatar并没有映射到上去,是因为模型本身的原因,处理方法:找到rig面板下的Avatar Definition选项选择Copy from other avatar,用其他动作的avatar


   11: 用按键控制动画的播放:

                 首先在状态机中将要播放的动画放入,然后用双向箭头将各个状态相连(双向对应按键的按下与抬起)

                ,然后定义参数变量parameter:

                   然后点击状态线:  ,设置其中的Conditions参数为刚才的parameter参数,w键“去箭头”大于0.1,“回箭头”小于0.1,s键“去箭头”小于-0.1,“回箭头”大于-0.1.

                   然后添加脚本:

using UnityEngine;using System.Collections;public class RobotController : MonoBehaviour {     private Animator ani;void Start () {        ani =gameObject.GetComponent<Animator>();} float v = Input.GetAxis("Vertical");        ani.SetFloat("vertical", v);//此处小写是因为设置参数是小写,我们就是将v传递给vertical        float h = Input.GetAxis("Horizontal");        ani.SetFloat("horizontal", h);}


   有时在按键之后,动作隔很久才能运动,是因为勾选了Animator面板中连接线的Has Exit time ,不勾选动作就能立马执行。

如果我们勾选了该项,在动画转换时会等待当前动画播放完毕才会转换到下一个动画,如果当前动画是循环动画会等待本次播放完毕时转换,所以对于需要立即转换动画的情况时记得要取消勾选。

还有一种情况时,当我当前的动画播放完毕后就自动转换到箭头所指的下一个状态(没有其他跳转条件),此时必须勾选该选项,否则动画播放完毕后就会卡在最后一帧,如果是循环动画就会一直循环播放。

   即四步:


          创建jump动画参数是bool类型的

        

  if(Input.GetKeyDown(KeyCode.Space))        {            ani.SetBool("jump", true);        }        //else        //{        //    ani.SetBool("jump", false);        //}//也可以这样写        if(Input.GetKeyUp(KeyCode.Space))        {            ani.SetBool("jump", false);        }
           此代码是加在上面代码中的。

          在jump按键设置中,从向前走到jump阶段中的Has Exit Time,应该取消,是为了使向前走动作还没播放完毕就切换播放jump动作,而jump到向前走状态的切换,就必须使
jump播放完毕,才能再次播放向前走,这才符合人的眼部思维。



          Animator状态机中的参数类型有:bool,float,trigger,int。

                             1:当按键是按下或者抬起状态时,使用bool来判断。例如jump

                             2:当按键是持续按下时用float,例如wasd键。

                             3:也可以使用trigger来触发检测按键,按了这个键就执行相应的动作。

               注意点:Has Exit Time是否勾选的依据是是否需要动作执行完毕之后,再执行其他动作。(一定要区分清楚是否勾选,特别是参数类型设置为trriger时,不然会得不到想要的结果)


         在播放jump这个动作的时候:

                jump过去的钩取消,回来的钩不能取消


在jump按键设置中,从向前走到jump阶段中的Has Exit Time,应该取消,是为了使向前走动作还没播放完毕就切换播放jump动作,而jump到向前走状态的切换,就必须使
jump播放完毕,才能再次播放向前走,这才符合人的眼部思维。


为什么jump设置为bool,wasad键设置为float是因为,按下jump,抬起jump不是持续状态,所以是bool,按住w键向前走,是一个持续的状态,用float参数表示

                   参数是与每个动作过渡线的Conditions联系在一起的。


  12:

    

在Rig(装配模式)下有几个选项:骨骼的类型:None,表示没有骨骼。Legacy:表示为老版本动画系统:Animation,在资源节约方面比较好,但动画融合不怎么样。Generic:表示为通用的骨骼,在humanoid基础上对Bone骨骼进行了增强,可以应用到怪物中。Humanoid:表示为人形骨骼(设置为人形骨骼可以使用Mecanim专门为人形骨骼开发的各种功能了), Mecanim 人形角色,可配置Avatar和重定向,但对Bone支持不好。

例如:在3dmax中可以做人物和物品的动画,导入unity里面选择Generic传统动画,那么人物和物品的动画都可以正常播放,而选择humanoid,则只能播放人物动画,原因是引擎找不到物品的骨骼

Generic动画:



变为Humanoid动画:


可以发现,物品的动画没有了。

  13: 

Bip是将骨骼进行自动映射 clear是清除原有骨骼配对。

14:unity使用30帧的帧率(FPS),不支持约束动画,和顶点动画。

  15:Generic中的Root node:动画根节点,校准动画位移。 人物的披风随风摆动,也是动画。其实是人物的Bone骨骼,但humanoid并没有将Bone骨骼融合进来,只有人物肉身的骨骼。主要用在攻击动画中。

                                                

0 0