[Unity2D]動畫事件Animation Events


    在創建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”的按鈕可以進入添加動畫事件的彈出窗口,該窗口會自動把腳本適用於動畫事件的函數都給帶出來,如圖所示:

    添加之后,動畫執行到這個時間點上就會執行腳本的動畫事件。添加效果的面板如下所示:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM