在創建Unity的游戲動畫的時候,我們還可以通過添加動畫事件的方式來實現,在動畫的過程中調用腳本的代碼來進行一些操作。
動畫剪輯中可以添加動畫事件,使你在時間軸特定的幀調用腳本中的函數。動畫事件調用函數時,可以用一個參數。參數可以是float,string,應用對象,或者動畫事件對象。函數被調用時,動畫事件對象可以將float,string,integer和引用對象等,這些成員變量全部傳遞給函數。
下面我們來看一下怎么實現動畫事件,實例的場景是一個簡單的爆炸動畫效果。
首先我們先創建一個精靈,給精靈添加動畫,如圖所示:
創建腳本如下所示:
using UnityEngine; using System.Collections; public class Destroyer : MonoBehaviour { public bool destroyOnAwake; // 是否在激活的時候銷毀對象 public float awakeDestroyDelay; // 銷毀對象的延時時間 public bool findChild = false; // 是否查找子對象並且銷毀掉 public string namedChild; //子對象名字 void Awake () { // 是否在激活的時候銷毀子對象 if(destroyOnAwake) { // 有子對象 if(findChild) { // 找到自對象,再銷毀,transform表示是當前的物體的子對象的集合 Destroy (transform.Find(namedChild).gameObject); } else { // 延時銷毀當前的物體 Destroy(gameObject, awakeDestroyDelay); } } } // 銷毀子對象函數,可以被動畫事件調用 void DestroyChildGameObject () { if(transform.Find(namedChild).gameObject != null) Destroy (transform.Find(namedChild).gameObject); } // 設置子對象不可用,可以被動畫事件調用 void DisableChildGameObject () { if(transform.Find(namedChild).gameObject.activeSelf == true) transform.Find(namedChild).gameObject.SetActive(false); } // 銷毀游戲對象函數,可以被動畫事件調用 void DestroyGameObject () { Destroy (gameObject); } }
在腳本上面定義了3個函數是可以作為動畫事件來調用的,下面看看怎么在動畫剪接中添加動畫事件。
把鼠標移到時間軸上,右鍵就可以看到彈出的“Add Animation Event”的按鈕,如圖所示:
點擊“Add Animation Event”的按鈕可以進入添加動畫事件的彈出窗口,該窗口會自動把腳本適用於動畫事件的函數都給帶出來,如圖所示:
添加之后,動畫執行到這個時間點上就會執行腳本的動畫事件。添加效果的面板如下所示: