unity 新版本動畫Animator元件
阿新 • • 發佈:2019-01-03
前言
Unity4.3版本之後添加了新的播放動畫元件Animator -> 以樹的形式來控制動畫的切換
在工程裡的模型裡選擇rig裡的AnimationType設定為新動畫Humanoid 之後 Apply
此時工程多了個阿凡達Avatar模型
可以在Avatar裡配置人物模型骨骼
動畫分割
- LoopTime : 迴圈
- Root Transform Rotation : 動畫播放是否對模型的旋轉產生影響
- Root Transform Positive(Y) : 是否對y軸位置產生影響
- Root Transform Positive(XZ) : 是否對模型的X Z 軸位置產生影響
打上勾就是不影響
動畫控制器 Animator Controller : 動畫控制器
在工程右鍵,找到,之後把這個控制器可以拖入給Aniamtor元件
雙擊這個控制器
新增動畫狀態
- 新增動畫有兩種方式
- 第一種在BaseLayer右鍵建立新的狀態,然後自己在檢視面板裡改名字,新增手動拖入對應的狀態
- 第二種是直接拖入動畫到BaseLayer,unity會根據動畫自己建立一個。
建立狀態轉換
點選狀態右鍵->MakeTransition ,此時有條線,把這條連點在要連線的狀態上,這兩個狀態就有聯絡了。
這時右邊有Layers 和 Parameters 兩個引數,
第一個Layers是新建一個狀態層,
第二個Parameter是設定狀態轉換的引數使用Parameter來設定他們狀態之間的轉換。
通過+號來新增
Bool : 用來播放迴圈動畫,條件進入,條件退出
Trigger : 用來播放非迴圈動畫,條件進入,自動退出
int float 的條件為 等於這個值,小於這個值,不等於這個值 3中情況來進入進出
在連線中新增Conditions, 設定屬性,此時就可以通過更改引數的值來改變人物的狀態
如當IdleToRun值為true時,則進入從普通狀態進入奔跑狀態用指令碼通過按鍵控制屬性的值
using UnityEngine;
using System.Collections;
public class PeopleAnimator : MonoBehaviour {
private Animator _ani;
void Awake(){
_ani = GetComponent<Animator> ();
}
void Update(){
if (Input.GetKey(KeyCode.A)) {
_ani.SetBool ("IdleToRun", true);
}
if (Input.GetKeyUp (KeyCode.A)) {
_ani.SetBool ("IdleToRun", false);
}
if (Input.GetKeyDown (KeyCode.Space)) {
_ani.SetTrigger ("IdleToJump");
}
if (Input.GetKeyDown (KeyCode.Q)) {
_ani.SetTrigger ("IdleToAttack");
}
}
}
- Layers 的使用(瞭解即可)
- 建立new Layer
- 在New Layer中建立一個預設狀態(對應了BaseLayer中的所有狀態,所以不需要賦值動畫)
- 在New Layer中建立Attack狀態
- 設定NewLayer中的IdleToRun(和BaseLayer中的Idle進入Run為同一個條件)
- 在模型中建立一個Avator,設定他的Humanoid ,
- NewLayer中點選齒輪設定Weight值, 傳給這個層的Mask新建的Avator。
- 此時就可以實現在原來狀態的基礎上進入攻擊狀態(如邊跑邊攻擊)
然而這種邊跑邊攻擊的狀態很醜,一般不會使用這種方法來實現,而是在做一個動畫。這裡只是來說明new Layer的用處,即新建的Layer在上層BaseLayer的狀態執行中,繼續執行其他狀態