Unity開發筆記-Timeline利用Clip實現Rewind回放


效果展示

除了使用signal,timeline也可以通過自定義clip實現rewind回放

原理:

實現PlayableBehaviour的子類,重寫ProcessFrame方法,參數中的Playable對象的GetDuration()和GetTime()可以獲得當前clip的總時間和當前時間
如果time接近duration,那么設法取到playableDirector,將time減去當前clip已播放的GetTime()即可

下面是PlayableBehaviour核心代碼:

  `public class LoopClipBehavior:PlayableBehaviour
  {
private PlayableDirector director { get; set; }

public override void ProcessFrame(Playable playable, FrameData info, object playerData)
{
    double duration = playable.GetDuration();
    double time = playable.GetTime();
    if (Math.Abs(time- duration)<=0.1f) 
    {
        var diff = playable.GetTime();
        director.time -= diff;
    }
    base.ProcessFrame(playable, info, playerData);
}

public override void OnPlayableCreate(Playable playable)
{
    base.OnPlayableCreate(playable);
    director = (playable.GetGraph().GetResolver() as PlayableDirector);
}
  }
  `

同時也需要實現PlayableAsset和TrackAsset的子類

LoopClipTrack.cs

[TrackClipType(typeof(LoopClip))]
public class LoopClipTrack: TrackAsset
{

}

LoopClip.cs

  `public class LoopClip : PlayableAsset
  {
public LoopClipBehavior template = new LoopClipBehavior();
public override Playable CreatePlayable(PlayableGraph graph, GameObject owner)
{
    var playable = ScriptPlayable<LoopClipBehavior>.Create(graph, template);
    return playable;
}
  }`


免責聲明!

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



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