Unity中的動畫系統和Timeline(3) 模型和動畫導入


動畫導入

 

美工做好的模型,直接將文件夾拖進來就導入好了。導入模型后,檢查模型的材質貼圖等是否丟失,若丟失,根據名字補上。如果美工取名規范,一一對應的話,就很簡單。如果不是,那就呵呵噠。

有的美工做的比較差,所有模型的動畫都在一個上面,需要我們后續的動畫分割,遇到這種,嗯,心里罵罵就好了。但是,作為一個程序,分割動畫真的好麻煩的好吧。

而有的美工就做的很好了,動畫都是單獨的,不需要我們后續動畫分割,但也有可能會需要一些小的調整。

 

選中模型后,Rig表示動畫的導入方式

Node:不導入動畫

Legacy:老版本的動畫導入方式,現在基本不會用到了,但是如果用到老版本的資源,也會使用到這個。使用此種方式導入的動畫,只能使用Animation組件播放動畫,而不能使用新版的動畫狀態機。

Generic:新版的動畫導入方式,適用於非人型的東西。選擇此種方式,要指定Avatar Definition(骨骼映射方式)和Root node(根節點)。其中骨骼映射方式可以選擇從當前模型創建和從其它骨骼復制,后者需要兩個模型具有相同的骨骼,通常一個美工做的是一樣的。參數Optimize Game Object,表示模型優化,建議在打包時勾選。

注意:此種方式不能使用動畫重定向,而且動畫的控制,比如移動等,都需要代碼控制!!!

Humanoid:新版的動畫導入方式,人型和非人型都能用。這種方式動畫不需要代碼單獨控制,而且相同的骨骼模型可以使用動畫重定向

Bake Into Pose:勾選后表示當前屬性不會隨動畫動作改變

Based Upon:相當於基點

Loop match:循環匹配,綠點表示匹配的很好

 

動畫分割

選中Animation進行動畫分割,勾選Loop Pose表示該動畫循環播放

 

通過動畫狀態機播放動畫

導入動畫后,將模型拖到場景中,創建的物體身上會自帶一個Animator組件,其中的Controller就是動畫狀態機。動畫狀態機可以手動創建(右鍵,Animator Controller),在Animator界面中可以對狀態機進行編輯。

 

通過代碼控制動畫狀態機

在Animation界面中的Parameter中,添加一個控制狀態,使用這個狀態來控制動畫的切換。其中,物體的Animator組件控制這些狀態。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Biker : MonoBehaviour {

    private Animator anim;

	void Start () {
        // 獲取Animator組件
        anim = GetComponent<Animator>();
	}
	
	void Update () {
        float v = Input.GetAxisRaw("Vertical");
        // 使用代碼控制狀態
        anim.SetInteger("Vertical", (int)v);
        //transform.Translate(Vector3.forward * v * Time.deltaTime * 4);
	}
}

StringToHash把參數字符串轉換成ID:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Biker : MonoBehaviour {

    private Animator anim;
    // 轉換ID
    int verticalID = Animator.StringToHash("Vertical");

	void Start () {
        // 獲取Animator組件
        anim = GetComponent<Animator>();
	}
	
	void Update () {
        float v = Input.GetAxisRaw("Vertical");
        // 使用代碼控制狀態
        anim.SetInteger(verticalID, (int)v);
        //transform.Translate(Vector3.forward * v * Time.deltaTime * 4);
	}
}

 

動畫的反向控制:

在Curves(曲線)里添加一個狀態曲線,左側添加一個相同名字的參數。在動畫運行的時候,因為動畫中有這個曲線,所以不能通過代碼來控制參數。但是,曲線運動時,在不同時間參數值會根據曲線變化。我們可以獲取到這個值來使用,比如,一個添加了角色控制器的角色翻牆,在翻牆動畫播放時,有一段時間需要將角色的角色控制器禁用,否則角色控制器會碰到牆壁。這時,設置好曲線,在翻牆動畫播放到一個時間段時,禁用角色控制器。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM