unity TimeLine SignalTrack

先新建一个TimeLine

 

image

image

 

image

 

 添加Track

image

 

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);
  }

}

 

posted @ 2025-09-10 17:09  WalkingSnail  阅读(12)  评论(0)    收藏  举报