最近一直再看這方面的內容,看的比較多知識點比較分散,所以目的就是把這些知識點內容梳理一邊,並作記錄。
PlayableDirector與TrackAsset,TrackAsset與PlayableAsset都是一對多的關系,並且TrackAsset和PlayableAsset都可以用PlayableBehaviour來定義行為。
Asset用來保存數據,Behavior用來定義行為
最初Playable軌道元素只需繼承basesasdadwdqw,現在無論是軌道(Track)還是軌道元素(TrackClip)都拆分為兩個部分Asset(數據)和PlayableBehavior (行為),
下面舉一個簡單的例子。
1,添加自定義軌道
public class ConditionTrack : TrackAsset
添加軌道行為類
public class ConditionTrackBehaviour : PlayableBehaviour
將ConditionTrackBehaviour綁定軌道資源的混合器中
public class ConditionTrack : TrackAsset { public override Playable CreateTrackMixer(PlayableGraph graph, GameObject go, int inputCount) { var playable = ScriptPlayable<ConditionTrackBehaviour>.Create(graph, inputCount); return playable; } }
2,創建自定義軌道資源 ConditionClip
[System.Serializable] public class ConditionClip : PlayableAsset
添加資源的行為類
public class ConditionBehaviour : PlayableBehaviour
在創建ConditionClip資源時綁定ConditionBehaviour
[System.Serializable] public class ConditionClip : PlayableAsset { public ConditionBehaviour ConditionBehaviour = new ConditionBehaviour(); public override Playable CreatePlayable(PlayableGraph graph, GameObject go) { var playable = ScriptPlayable<ConditionBehaviour>.Create(graph, ConditionBehaviour); ConditionBehaviour clone = playable.GetBehaviour(); return playable; } }
3,軌道指定綁定資源類型
[TrackClipType(typeof(ConditionClip))] public class ConditionTrack : TrackAsset
這樣的話,在ConditionTrack中就可以指定創建ConditionClip類型的PlayableAsset
常用API簡介
TrackAsset
對於軌道上的每一個實例對於軌道都是一個TimelineClip類型,並且可以通過GetClips()來獲取實例群
public class ConditionTrack : TrackAsset { //在軌道上創建軌道資源時調用 public override Playable CreateTrackMixer(PlayableGraph graph, GameObject go, int inputCount){}
}
PlayableAsset
public class ConditionClip : PlayableAsset { //創建實例時調用 public override Playable CreatePlayable(PlayableGraph graph, GameObject go) {} }
PlayableBehaviour
TrackAsset,PlayableAsset對應的行為都是一樣的PlayableBehaviour
public class ConditionClip: PlayableBehaviour { // 再創建實例時調用 public override void OnPlayableCreate(Playable playable){}
// 當開始執行此狀態時調用 public override void OnBehaviourPlay(Playable playable, FrameData info) {} // 當離開此狀態,或者編輯器停止運行時調用 public override void OnBehaviourPause(Playable playable, FrameData info) {} // 在此狀態中運行時每幀調用 public override void PrepareFrame(Playable playable, FrameData info) {} }