自定义Marker实现:Playable中的通知系统
marker和Signal有相似的地方:
1.简介
marker: 1.Notifycation(通知)
2.Send(发送)
3.Receiver(接收)
自定义marker的试验:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Timeline;
public class SimpleMarker : Marker
{
}
2.按照上面marker的三个组成来执行代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;
public class MyNotification : INotification
{
public PropertyName id { get; }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;
public class SendNotification : MonoBehaviour
{
public PlayableGraph graph;
// Start is called before the first frame update
void Start()
{
Debug.Log(" -------push------ ");
graph = PlayableGraph.Create("SendNotify");
var outPut = ScriptPlayableOutput.Create(graph, "Notify outPut");
var reciver = new ReciverExample();
outPut.AddNotificationReceiver(reciver);
outPut.PushNotification(Playable.Null, new MyNotification());
graph.Play();
}
private void OnDestroy()
{
graph.Destroy();
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;
public class ReciverExample : INotificationReceiver
{
public void OnNotify(Playable origin, INotification notification, object context)
{
if (notification != null)
{
var timeData = origin.IsValid() ? origin.GetTime() : 0;
Debug.Log($"接受到 类型是{notification.GetType()},收到时间是{timeData}");
}
}
}
在场景中新建物体,挂脚本
运行unity看结果
3.实现在timeline中使用自定义的marker
如上图对步骤2中的代码稍作改动即可(此时SendNotification脚本可以完全注释掉)