Unity Mecanim动画的实现(四):Animation Controller设置
Animation Controller(动画控制器)是Animator的重要组成部分,是模型动画的驱动,动画控制器是通过动画状态机来实现不同动画剪辑的切换。
这里有两个关键词:
1.状态(动画剪辑),动画剪辑就是每个动画模型所可以执行的动画剪辑(Animation),比如休闲(Ideal)、走(Walk)、跑(Run)等。状态以圆角矩形表示,黄色表示默认的状态,即模型的默认动画状态。在实际操作中只要将动画剪辑拖拽到Animation Controller中就可以成为一个状态。
每个状态就是一段动画,可以通过动画剪辑中的speed属性来控制动画播放速度,甚至进行倒序播放。如下图中的Walk-Sheathedback和Walk-Sheathed其实为一个动画剪辑,但是Walk-Sheathedback将速度设定为-1,则其将由Walk-Sheathed的最后一帧往第一帧播放.
2.过渡(Transition),过渡指不同动画之间的切换条件,在动画状态机中以方向箭头表示。状态之间的过渡需要通过状态参数来进行控制,即在Unity中通过脚本控制状态参数之间的变化来控制状态之间的变化。比如在我们可以设定一个Float参数Speed来控制Idle、Walk和Run之间的切换。Idle与Walk之间:Speed>0,Walk;Speed<0.01,Idle。Walk与Run之间,Speed>0.5,Run;Speed<0.5,Walk。通过这个设定我们只要用如下脚本就可以实现模型在Idle、Walk和Run之间切换。
float v=Input.GetAxis("Vertical");//如果不按键,则会为0,如果按键为W则逐渐由0-1变化,松开之后则由1-0变化,如果按下S则由0 - -1变化,松开则-1-0变化
_animator.SetFloat(SPEED,v);
通过动画状态机的设置可以简单实现模型的前后走动与跑步,以及实现武器(工器具)动画的切换。切换需要通过代码进行控制
using System.Collections;
public class PlayerControllerScript : MonoBehaviour {
private Animator _animator;
public const string SPEED="Speed";
public const string ISFIGHT="IsFight";
public float speed=10f;
public bool isFight=false;
// Use this for initialization
void Start () {
}
void Awake(){
_animator=GetComponent<Animator>();
}
// Update is called once per frame
void Update () {
float v=Input.GetAxis("Vertical");//如果不按键,则会为0,如果按键为W则逐渐由0-1变化,松开之后则由1-0变化,如果按下S则由0 - -1变化,松开则-1-0变化
_animator.SetFloat(SPEED,v);
if(v>0f){
transform.position+=Time.deltaTime*speed*v*Vector3.forward;
}if(v<0f){//如果按键0,则倒退
transform.position+=Time.deltaTime*speed*v*Vector3.forward*0.4f;
}
if(Input.GetKeyDown(KeyCode.Q)){//按键Q来切换武器
isFight=!isFight;
_animator.SetBool(ISFIGHT,isFight);
}
}
}