最近一直再看这方面的内容,看的比较多知识点比较分散,所以目的就是把这些知识点内容梳理一边,并作记录。
一个TimeLine包含一个PlayableDirector,而PlayableDirector与TrackAsset,TrackAsset与PlayableAsset都是一对多的关系,并且TrackAsset和PlayableAsset都可以用PlayableBehaviour来定义行为。
Asset用来保存数据,Behavior用来定义行为,下面举一个简单的例子。
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,创建自定义轨道PlayableAsset
[System.Serializable] public class ConditionClip : PlayableAsset
行为类
public class ConditionBehaviour : PlayableBehaviour
ConditionBehaviour绑定PlayableAsset资源
[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,PlayableAsset绑定TrackAsset
[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) {} }