先來看下效果,播放的結尾后回到前面的某一個位置,然后循環
具體實現思路如下:
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();
}
}`