當我們需要在動畫播放到某一幀的時候同時發生一個事件,比如對人物造成傷害,或者使某些物體隱藏出現等,我們可以通過動畫時長來計算幀數,然後在某個動畫的某個時間進行事件的觸發,這種方法通常可能會使事件不能完全對上某一幀,我們可以直接通過編輯動畫在動畫幀上添加事件來完成我們需要的功能。
我們在Unity裏面編輯的動畫可以直接在動畫編輯界面處理添加事件的方法,通過外部導入的動畫通常是隻讀的,需要找到動畫點擊Editor編輯並且手動輸入事件方法,做個演示:
首先是Unity製作的動畫,我在一個Player身上創建了一個動畫(選中Player---Windows---Animation),如下:
這是一個簡單的移動動畫,在動畫起始和動畫結束分別添加了事件,點擊到對應的事件會出現這樣的面板:
可以看到沒有方法進行選擇,我們寫個腳本掛在Player上面。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerAnimEvent : MonoBehaviour {
public void PlayerAnim(string s)
{
Debug.Log(s);
}
}
我們再次選中事件,選擇方法:
可以看到我們剛纔的方法,選擇方法並輸入對應的參數。
先放着不看效果,我們看導入的外部動畫;
通過Unity自帶的Animation打開:
可以看到沒有辦法編輯。我們點擊動畫的Inspector面板的Editor:
展開效果:
我們拖動到最後面添加一個事件:
可以看到添加事件自動添加可一個名字叫NewEvent的方法,下面有四個類型的參數,我們來修改它:添加一個腳本到這個動畫物體上:
using System.Collections.Generic;
using UnityEngine;
public class PangXieAnimEnvent : MonoBehaviour {
public GameObject Player;
public void PangXieAnim(int i)
{
Debug.Log(i);
Player.SetActive(true);
}
}
這個事件的作用就是動畫完成後做一個自定義的打印,並且使Player出現,然後Player會播放自身的動畫和事件。
再次打開動畫編輯,點擊事件,把方法名改成腳本的方法名並且在Int參數欄填入參數:
看下演示效果:
另外,如果我們不是選中Player而是選中Player的動畫,在通過Window---Animation打開動畫編輯然後選中事件會看到這樣的界面:
可以看到之前配置好的事件,當然也可以在這裏直接做修改,就不做演示了。
歡迎加羣:4364930討論。