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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM