現在網上雖然講解Unity3D動畫的文章不少,但是卻少很少帶實際例子的。剛好我之前給美術做了個簡單的例子,所以整理一下就共享給大家了。主要是做了兩種動畫,分別有例子,按空格可以改變動畫。具體的製作過程不會非常詳細(寫的過程中,Generic被我寫得有點詳細了:),這裏假設大家都是有一定的編程或者Unity基礎的。
一、基礎
- Unity3D 5.3.5可編譯運行
- 腳本採用C#腳本編寫
- 模型是FBX模型文件
- 運行結果圖
性子急的或者有基礎可以直接下載源碼進行研究
二、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,小遊戲之類的,動畫模型不多,還可以人力去做,去設置之間的關係。在實際開發手遊項目過程,我們會採用一些腳本自動打包這些模型動作,以及自動綁定相關的腳本,這樣維護性就高很多了。