筆記22 如何製作動畫

玩家行走動畫

創建地面、瞭解骨骼

在這裏插入圖片描述

動畫控制器

在這裏插入圖片描述

添加參數(有4 種類型)

在這裏插入圖片描述

添加剛體(爲了使觸發有效)、碰撞器

在這裏插入圖片描述

代碼:PlayerControl

 public class PlayerControl : MonoBehaviour {

    //首先拿到動畫播放組件
    private Animator ani;

	void Start () {
        //首先拿到動畫播放組件
        ani = GetComponent<Animator>();
    }

    void Update () {
        //爲了讓它動起來,需要獲取輸入軸
        float vertical = Input.GetAxis("Vertical");
        float hotizontal = Input.GetAxis("Horizontal");
        Vector3 dir = new Vector3(hotizontal, 0, vertical);
        //如果向量不等於000,說明我們按了一個鍵
        if(dir != Vector3.zero)
        {
            //先旋轉到這個方向
            transform.rotation = Quaternion.LookRotation(dir);
            //然後前進。每秒走兩米
            transform.Translate(Vector3.forward * 2 * Time.deltaTime);
            //行走動畫
            ani.SetBool("Walk", true);
        }
        else
        {
            ani.SetBool("Walk", false);
        }
	}
}

門的動畫(舊版動畫)

觸發器;添加Animation組件後,得以創建舊版動畫。

在這裏插入圖片描述

幀動畫、錄製動畫

在這裏插入圖片描述

代碼:Door

public class Door : MonoBehaviour {
    //得到組件
    private Animation ani;

	void Start () {
        //去我的子物體裏面找
        ani = GetComponentInChildren<Animation>();
	}
	
	// Update is called once per frame
	void Update () {
		
	}

    //有人進到觸發了
    private void OnTriggerEnter(Collider other)
    {
        //播放開門動畫
        ani.Play("DoorOpen");
    }
    //有人離開觸發了
    private void OnTriggerExit(Collider other)
    {
        ani.Play("DoorClose");
    }
}

平臺升降動畫

製作好觸發器

在這裏插入圖片描述

代碼:CubeTest

public class CubeTest : MonoBehaviour {
    //獲得它的Animation
    private Animation ani;

	void Start () {
        //獲得它的Animation
        ani = GetComponent<Animation>();
    }

    //有人進到觸發了
    private void OnTriggerEnter(Collider other)
    {
        //拿到動畫狀態
        AnimationState state = ani["Up"];
        //state裏面有很多東西
        //例如名字state.name
        //例如當前動畫的循環模式state.wrapMode
        //例如當前播放的時間。即當前從哪裏開始播放
        state.time = 0;
        //例如播放的速度。1是正常速度。
        state.speed = 1;
        //播放
        ani.Play("Up");
        //添加動畫判斷。有兩種,輸出的都是布爾值。
        //一。isPlaying表示是否正在播放動畫,是個屬性。
        Debug.Log(ani.isPlaying);
        //二。IsPlaying("Up")當前是否在播放Up這個動畫,這是個方法。
        Debug.Log(ani.IsPlaying("Up"));
    }
    //有人離開觸發了
    private void OnTriggerExit(Collider other)
    {
        //拿到動畫狀態
        AnimationState state = ani["up"];
        //state.time當前播放的時間,state.length當前動畫的總長度,
        //比如動畫的總長度是1秒,那麼它卡開始播放時間就是第1000毫秒。
        state.time = state.length;
        //將速度調爲-1,表示逆向播放
        state.speed = -1;
        //播放
        ani.Play("Up");
    }
}

新動畫創建,切換,過渡

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章