Unity3D Animator 動態新增事件回撥和替換動畫
阿新 • • 發佈:2019-02-14
主要的層次結構式是, Animator 包含一個 AnimatorStateController 控制器, Controller 含有多個層,每個層含有多個狀態, 每個狀態可以繫結一個AnimationClip。執行動畫的是AnimationClip , 可以掛在回撥事件的也是AnimationClip。所以,動態掛在事件回撥,我們需要獲取AnimationClip。
AnimationEvent aEvent1 = new AnimationEvent(); aEvent1.time = clip.length; aEvent1.functionName = "OnOpenComplete"; clip.AddEvent(aEvent1);
以上是動態建立一個事件回撥,然後掛在到AnimationClip上的方法。AnimationEvent的 time就是動畫的時間,這裡賦值clip的length表示,動畫執行完成後回撥。那麼回撥函式式一個字串,是通過訊息機制回撥,當前clip所在GameObject上的一個函式名來呼叫。
有兩個辦法,從Animator裡面拿到AnimationClip。
第一, Controller 裡面包含多個 AnimationClip 可以通過 Controller的陣列animationClips 拿到所有的clip。
第二, 把掛載在Controller上的clip直接掛載到GameObject上當屬性獲得。
AnimatorOverrideController overrideController = new AnimatorOverrideController(); overrideController.runtimeAnimatorController = anim.runtimeAnimatorController; overrideController["clipName"] = newClip; anim.runtimeAnimatorController = overrideController;
clipName 就是原來AnimationClip的name, 這樣可以動態的替換掉播放的動畫。