Unity动画☀️五、分割、播放动画、控制模型位移

2024-08-14 15:59:44 浏览数 (3)

一、分割动画

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详解

大家还有什么问题,欢迎在下方留言!

0 人点赞