1. 程式人生 > >unity 新版本動畫Animator元件

unity 新版本動畫Animator元件

前言

Unity4.3版本之後添加了新的播放動畫元件Animator -> 以樹的形式來控制動畫的切換

  • 在工程裡的模型裡選擇rig裡的AnimationType設定為新動畫Humanoid 之後 Apply
    1
    此時工程多了個阿凡達Avatar模型
    2

  • 可以在Avatar裡配置人物模型骨骼

  • 動畫分割
    這裡寫圖片描述

    1. LoopTime : 迴圈
    2. Root Transform Rotation : 動畫播放是否對模型的旋轉產生影響
    3. Root Transform Positive(Y) : 是否對y軸位置產生影響
    4. Root Transform Positive(XZ) : 是否對模型的X Z 軸位置產生影響

打上勾就是不影響

動畫控制器 Animator Controller : 動畫控制器

在工程右鍵,找到,之後把這個控制器可以拖入給Aniamtor元件
雙擊這個控制器

新增動畫狀態

  • 新增動畫有兩種方式
    1. 第一種在BaseLayer右鍵建立新的狀態,然後自己在檢視面板裡改名字,新增手動拖入對應的狀態
    2. 第二種是直接拖入動畫到BaseLayer,unity會根據動畫自己建立一個。
      1

建立狀態轉換

  • 點選狀態右鍵->MakeTransition ,此時有條線,把這條連點在要連線的狀態上,這兩個狀態就有聯絡了。

  • 這時右邊有Layers 和 Parameters 兩個引數,
    第一個Layers是新建一個狀態層,
    第二個Parameter是設定狀態轉換的引數

  • 使用Parameter來設定他們狀態之間的轉換。
    2
    通過+號來新增
    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 的使用(瞭解即可)
    1. 建立new Layer
    2. 在New Layer中建立一個預設狀態(對應了BaseLayer中的所有狀態,所以不需要賦值動畫)
    3. 在New Layer中建立Attack狀態
    4. 設定NewLayer中的IdleToRun(和BaseLayer中的Idle進入Run為同一個條件)
    5. 在模型中建立一個Avator,設定他的Humanoid ,
    6. NewLayer中點選齒輪設定Weight值, 傳給這個層的Mask新建的Avator。
    7. 此時就可以實現在原來狀態的基礎上進入攻擊狀態(如邊跑邊攻擊)

然而這種邊跑邊攻擊的狀態很醜,一般不會使用這種方法來實現,而是在做一個動畫。這裡只是來說明new Layer的用處,即新建的Layer在上層BaseLayer的狀態執行中,繼續執行其他狀態