Unity3D的Generic和Legacy動畫例子(C#腳本)

現在網上雖然講解Unity3D動畫的文章不少,但是卻少很少帶實際例子的。剛好我之前給美術做了個簡單的例子,所以整理一下就共享給大家了。主要是做了兩種動畫,分別有例子,按空格可以改變動畫。具體的製作過程不會非常詳細(寫的過程中,Generic被我寫得有點詳細了:),這裏假設大家都是有一定的編程或者Unity基礎的。

一、基礎

  1. Unity3D 5.3.5可編譯運行
  2. 腳本採用C#腳本編寫
  3. 模型是FBX模型文件
    這裏寫圖片描述
  4. 運行結果圖
    這裏寫圖片描述
  5. 性子急的或者有基礎可以直接下載源碼進行研究

    Unity3D動畫例子源碼

二、Generic動畫

Generic是新的動畫系統,它就是支持非人形的動畫,建議使用它。但是它不能向Humanoid重定向動畫。
1. 設置資源格式
選中Generic_Animation資源,在顯示面板那裏 Rig選擇Generic
這裏寫圖片描述
2. 創建AnimatorController
這裏寫圖片描述
最後命名爲GenericController放在Anim文件夾下面
在Swordman的目錄下,選擇Generic_Animation,然後把裏面自己需要用到的動作添加到控制器去
這裏寫圖片描述
先拖一個Idle進去,再拖Run進來,如下圖
這裏寫圖片描述
3. 關聯Idle和Run動作
需要給這兩個動作設置相關參數,方便我們程序調用
這裏寫圖片描述
在Idle上右鍵- — 選擇 Make Transition,然後控制鼠標箭頭連到Run
同樣的Run也關聯到Idle
這裏寫圖片描述
4. 增加動作之間的狀態
動作配置好了之後,我們就要動作設置狀態了,這裏我們簡單設置,增加一個布爾值 Move來表示移動和停止。
那麼Move爲true的時候,表示需要移動了,則是從Idle切換到Run,false則是從Run切換到Idle
首先在Animator的paramer那裏增加一個布爾的Move參數(沒有之前是 list is Empty)
這裏寫圖片描述
點擊旁邊的+號,然後選擇Bool類型,最後命名爲Move
這裏寫圖片描述
5. 設置動作之間的狀態
選中Idle到Run的箭頭,然後在旁邊設置move屬性爲true
這裏寫圖片描述
Run到Idle的箭頭,設置Move屬性爲false
這裏寫圖片描述
6. 添加人物模型
前面的基礎動作配置好了,那麼就在場景中增加模型吧
首先把Swordman_No_Animation拖放到舞臺,然後命名爲GenericAnimation
這裏寫圖片描述
這裏寫圖片描述
剛拖進入是背面的,那麼設置一下Y-180。
把Unity自帶的Animation給刪除掉(這個其實就是Legacy動畫要用到了,後面再講)
然後給增加一個Animator組建,在Add Component那裏搜索Animator,然後點擊添加進去
這裏寫圖片描述
同時給這個組件設置相關參數了。
Controller和Avatar分別給添加上,點擊那個小圓圈會出現選項了。最後添加GenericAnimMgr腳本。
這裏寫圖片描述
到這裏,暫時需要直接在Unity設置的東西就差不多了,那麼開始寫C#腳本了
7. C#控制腳本
腳本比較簡單,主要是通過Animator 組件來數值Move的true和false

using UnityEngine;
using System.Collections;
/// <summary>
/// 使用Animator控制角色動作的例子
/// </summary>
public class GenericAnimMgr : MonoBehaviour 
{
    private Animator animator;
    private bool isRun;
    // Use this for initialization
    void Start ()
    {
        animator = this.GetComponent<Animator>();
        //默認播放 idle
        animator.SetBool("Move", false);
    }

    // Update is called once per frame
    void Update () 
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {

            if (isRun)
                //平滑切換
                animator.SetBool("Move", false);
            else
                animator.SetBool("Move", true);
            isRun = !isRun;
        }
     }
}

三、Legacy動畫

legacy是老的動畫系統,不多說。在引入Mecanim之前,Unity使用了自己的動畫系統以便向後兼容,此係統仍然可用。 使用舊版動畫系統主要是爲了方便繼續開發沒有使用新Mecanim系統的項目。 然而,不推薦再在新項目中使用舊版動畫系統。
1. 添加模型
步驟和Generic一樣,把Swordman_No_Animation拖放到舞臺,然後命名爲LegacyAnimation
2.添加動作
直接在Animation組件裏進行添加,不需要額外的其他控制器製作
Animation屬性,是默認出現的動作,這裏選擇Idle
Animations表示這個模型有多少動作,這裏選擇2,同時增加Idle和Run
3.添加LegacyAnimMgr腳本
最後如何圖
這裏寫圖片描述
4. C#腳本

using System;
using UnityEngine;
using System.Collections;
/// <summary>
/// 動畫控制器(基於Legacy的動畫類型)
/// by sodaChen
/// </summary>
public class LegacyAnimMgr : MonoBehaviour 
{
    /** 動畫控制器 **/
    private Animation anim;
    private bool isRun;
    void Start () 
    {
        //獲取到動畫組件
        anim = this.GetComponent<Animation>();
        //默認播放站立動作(如果組件有配置,這裏則可以不用寫)
        //anim.Play("Sword-Idle");  
    }

    // Update is called once per frame
    void Update () 
    {
        //通過不同的鍵盤控制來播放指定的動畫
        if (Input.GetKeyDown(KeyCode.Space))
        {

            if (isRun)
                anim.CrossFade("Sword-Idle");
            else
                //角色跑起來
                anim.Play("Sword-Run");
            isRun = !isRun;
        }
        if (Input.GetKeyDown(KeyCode.LeftAlt))
        {
            //漸變到站立動作,有個緩衝動作。具體看API描述作用
            anim.CrossFade("Sword-Idle");
            //直接切換站立動作
            //anim.Play("Sword-Idle");  
        }
    }
}

四、總結

Unity做動畫還是比較簡單的,其實還有Humanoid動畫,就是新的人形重定向動畫系統。不過這裏的製作還是比較依賴Unity,小遊戲之類的,動畫模型不多,還可以人力去做,去設置之間的關係。在實際開發手遊項目過程,我們會採用一些腳本自動打包這些模型動作,以及自動綁定相關的腳本,這樣維護性就高很多了。

發佈了91 篇原創文章 · 獲贊 72 · 訪問量 78萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章