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


先來看下效果,播放的結尾后回到前面的某一個位置,然后循環

具體實現思路如下:

1.設置marker標記,作為定位
2.利用signal emitter,觸發消息事件
3.signal receiever監聽事件,通過查找marker獲得time
4.通過設置PlayableDirector的time屬性,改變timeline的播放位置,從而實現了rewind播放功能

示例中,在timeline的結束處,在signal track上放置一個signal emitter
點擊signal emitter,添加signal asset,這里命名為marker_rewind

在場景中新建一個signal reciever,新建MarkerRecieverRewind.cs腳本進行監聽

MarkerRecieverRewind需要實現INotificationReceiver接口

  `public void OnNotify(Playable origin, INotification notification, object context)
    {}`

當監聽到signal事件之后,我們需要
1.獲得marker對象,拿到time屬性
2.獲得PlayableDirector,根據marker的time修改time屬性

marker的獲取:

1.將notification強轉為signalEmitter

SignalEmitter emitter = (SignalEmitter)notification;

2.拿到TimlineAsset

TimelineAsset ta = emitter.parent.timelineAsset;

3,通過TimlineAsset的markerTrack屬性獲取marker

IMarker marker = ta.markerTrack.GetMarker(0);

PlayableDirector的獲取:

通過接口的Playable對象可以獲取到

PlayableDirector director = (PlayableDirector)origin.GetGraph().GetResolver();

完整代碼如下:

  `public class MarkerRecieverRewind : MonoBehaviour, INotificationReceiver
{
    public void OnNotify(Playable origin, INotification notification, object context)
    {
        PlayableDirector director = (PlayableDirector)origin.GetGraph().GetResolver();

        SignalEmitter emitter = (SignalEmitter)notification;
        TimelineAsset ta = emitter.parent.timelineAsset;
        int markerCount = ta.markerTrack.GetMarkerCount();
        if (markerCount > 0)
        {
            IMarker marker = ta.markerTrack.GetMarker(0);
            director.Pause();
            director.time = marker.time;
            director.Play();
        }
    }`


免責聲明!

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



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