一、分割动画
Perfab:Import Animation是否导入动画
勾选后可在下方分割动画
Start:开始帧
End:结束帧
Loop Time:循环播放
Loop Pose:让循环播放更加完美(无缝隙的)
二、播放动画
Animator组件控制状态机,状态机控制动画Animation Clips,Animator组件可搜索添加,也可设置为Generic、Humanoid时自动添加
1、在AnimControllers文件夹新建状态机,并将其赋予Model Animator—Controller
2、双击状态机/Window—Animator进入状态机,建立动画切换之间的控制策略
右键Animation Clip选择Make Transition,连接至另一个动画,选中直线
Has Exit Time:代表只有本动画播放完,才可进入下一动画
思路:Animator—Layers里面设置参数,给状态机里面的动画设置与这些参数设置关联的切换条件,通过代码控制参数,从而控制了状态机里面动画的切换
1、在Parameters里设置Int型参数“Vertical”
思路:通过方法,按下不同按键C#给Animator—Controller的状态机的Vertical赋三个值:按上时赋值1,下-1,不按0;
并且状态机要检测到数值变化要做什么,即要设置检测到数值变化,根据变化条件不同来切换动画——如果按上,从Idel到切换到RunForward;按下,从Idel切换到RunBack:
选中Transition方向线,Conditions(条件)添加条件,选中要识别的参数,选择Greater(大于)、Less、Equals或NotEqual,右侧填入比较的数值,取消Has Exit Time
2、若不添加转换回去的条件,动画会在当前状态,不会切换到其他动画去
即如果不添加RunForward到IdelTransition,它是不会切换回去的,也不会到RunBackward,即使Parameters数值满足Idel到RunBackward的条件
3、C#代码
代码语言:javascript复制using UnityEngine;
public class Biker : MonoBehaviour {
private Animator anim;
// Use this for initialization
void Start () {
anim = GetComponent<Animator>();
}
// Update is called once per frame
void Update () {
float v = Input.GetAxisRaw("Vertical"); //这个Vertical对应着键盘垂直方向上下键,名称可在下图位置设置
anim.SetInteger("Vertical", (int)v); //这个Vertical对应着状态机里面的参数Vertical,且它被我们定义为是Int型,所以需要转化
transform.Translate(Vector3.forward * v * Time.deltaTime*4); //4米每秒
}
}
Input.AxisRaw详解
Time.deltaTime详解
大家还有什么问题,欢迎在下方留言!