unity TimeLine SignalTrack

unity TimeLine SignalTrack

先新建一个TimeLine

 

image

 添加Track

image

 

 

using SLSC.LBE;
using System;
using UnityEngine;
using UnityEngine.Playables;public class TestCubeReceiver :MonoBehaviour,INotificationReceiver
{public void OnNotify(Playable origin, INotification notification, object context){Debug.LogError("Test Cube Success");}
}
using System;using System.ComponentModel;
using UnityEngine;
using UnityEngine.Playables;
using UnityEngine.Timeline;[DisplayName("Cube测试")]
[Serializable]
public class TestCubeSignal : Marker, INotification, INotificationOptionProvider
{public PropertyName id { get; }NotificationFlags INotificationOptionProvider.flags => NotificationFlags.TriggerOnce | NotificationFlags.TriggerInEditMode;}
using System.ComponentModel;
using UnityEngine.Timeline;
using UnityEngine;
[TrackBindingType(typeof(TestCubeReceiver))]
[DisplayName("测试Cube")]
public class TestCubeSignalTrack :MarkerTrack
{}

 

 

相机震动例子

using System.ComponentModel;
using UnityEngine.Timeline;namespace SLSC.LBE
{[TrackBindingType(typeof(ShakeCameraReceiver))][DisplayName("相机震动信号轨道")]public class ShakeCameraSignalTrack : MarkerTrack{}
}using UnityEngine.Playables;
using UnityEngine.Timeline;
using UnityEngine;
using System.ComponentModel;
using System;namespace SLSC.LBE
{[DisplayName("相机震动")][Serializable]public class ShakeCameraSignal : Marker, INotification, INotificationOptionProvider{public float duration;public Vector3 offset;public int vibrato;public PropertyName id { get; }NotificationFlags INotificationOptionProvider.flags => NotificationFlags.TriggerOnce | NotificationFlags.TriggerInEditMode;}}using UnityEngine;
using System;
using UnityEngine.Playables;namespace SLSC.LBE
{public class ShakeCameraReceiver : MonoBehaviour, INotificationReceiver{public void OnNotify(Playable origin, INotification notification, object context){if (notification is ShakeCameraSignal){ShakeCameraSignal signal = (ShakeCameraSignal)notification;SLSCManager.Instance.ShakeCamera(signal.duration,signal.offset,signal.vibrato);}}}
}{public void ShakeCamera(float duration, Vector3 offset, int vibrato){//震动CameraOffset物体,即mainCamera的父物体
      MainCameraTrans.parent.DOShakePosition(duration, offset, vibrato);}}