Unity TimeLine

最近一直再看这方面的内容,看的比较多知识点比较分散,所以目的就是把这些知识点内容梳理一边,并作记录。

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) {} }

 

posted @ 2019-03-08 16:22  Jeanc  阅读(1750)  评论(0编辑  收藏  举报