- AnimNotify_Sound可用來播放音效
- AnimNotify_PlayParticleEffect可用來播放粒子特效
開發者可以自行擴充AnimNotify系統,透過繼承AnimNotify類別體系就可以自訂動畫事件。編輯器會偵測所有的AnimNotify,所以不需修改編輯器的原始碼就可看到新增的動畫事件。AnimNotify是存放在AnimSequence裡,所以不同模型實例播放同一個動畫時用的是相同的AnimNotify,這點在撰寫AnimNotify時要特別留意。
範例
以下是一個可以改變物理模式的AnimNotify的例子:
class AnimNotify_SetPhysics extends AnimNotify_Scripted; /** New Physics to set on notify. */ var() EPhysics Physics; event Notify(Actor Owner, AnimNodeSequence AnimSeqInstigator) { if( Owner != none ) { Owner.SetPhysics(Physics); } } defaultproperties { NotifyColor=(R=200,G=200,B=200,A=255) }當事件觸發時會呼叫AnimNotify_Scripted::event Notify(),然後呼叫SetPhysics()改變Actor的物理模式。
另外要注意在AnimSetViewer裡是只有模型而沒有Actor的,所以無法預覧SetPhysics()的結果,因此要在Notify事件裡檢查Actor是否為none。
AnimNotify_Scripted類別
上例中的AnimNotify_Scripted類別是讓開發者使用UnrealScript就可以自訂新的AnimNotify。
實際上動畫事件的基礎類別是AnimNotify,不過它是原生類別,要直接擴充它需要寫C++,沒有原始碼授權是做不到的。動畫事件觸發時會呼叫虛擬函式Notify(),AnimNotify_Scripted覆寫了虛擬函式Notify()去呼叫自己的Notify事件。AnimNotify_Scripted會檢查有Owner才會呼叫Notify事件,但是只有在遊戲中或PIE才會有Owner,在AnimSetViewer裡是只有模型沒有Owner的,所以AnimNotify_Scripted無法實作預覽功能。
期間
其實AnimNotify的事件是可持續一段時間的。如果它的Duration屬性大於零,會在每個frame呼叫AnimNotify::NotifyTick(),然後結束時呼叫AnimNotify::NotifyEnd()。AnimNotify_Trails就有使用到這兩個函式。
AnimNotify_Scripted並不提供NotifyTick事件。
沒有留言:
張貼留言