我们需要3个脚本:
一个自定义接收器,一个带参数的Mark信号,一个自定义轨道。
先贴上脚本:
Mark信号
我的信号需要继承Marker,类似于信号。
using UnityEngine.Playables;
using UnityEngine.Timeline;
using UnityEngine;
using System.ComponentModel;
[DisplayName("我的信号")]
public class MySignal : Marker, INotification, INotificationOptionProvider
{
public string sigName;
public int sigParm1;
public PropertyName id { get; }
NotificationFlags INotificationOptionProvider.flags => NotificationFlags.TriggerOnce | NotificationFlags.TriggerInEditMode;
}
我们可以看到下面就多了Add 我的信号
接收器
这里负责处理不同的信号类型,我这里写了如果是MySignal就显示出来,如果你有多个信号类型可以自行扩充。这个脚本挂在一个对象上就可以了。
脚本如下:
using UnityEngine.Playables;
using UnityEngine;
class MySignalReceiver : MonoBehaviour,INotificationReceiver
{
public void OnNotify(Playable origin, INotification notification, object context)
{
if (notification is MySignal)
{
MySignal signal = (MySignal)notification;
Debug.Log(signal.sigName + "," + signal.sigParm1);
}
}
}
轨道
然后是我们的轨道,我们看到这个轨道Binding类型就是我们的接收器。
using System.ComponentModel;
using UnityEngine.Timeline;
[TrackBindingType(typeof(MySignalReceiver))]
[DisplayName("我的信号轨道")]
public class MySignalTrack : MarkerTrack
{
}
在Timeline上点击鼠标右键,我们就可以添加轨道了。
然后我们需要把脚本对象拖动上去
然后我们添加两个信号
并且可以输入信号的参数。
我们运行看效果
这样就实现了自定义信号,也不麻烦还很好用。