【Unity】自前Signal がエディット中にもNotification を呼んでほしいときの対応
2019年6月30日
UnityEngine.Timeline.INotificationOptionProvider を継承し flags に NotificationFlags.TriggerInEditMode を立てる。
シグナル送信側
[System.Serializable, DisplayName( "PositionMarker")]
public class PositionMarker : UnityEngine.Timeline.Marker , INotification , INotificationOptionProvider
{
public Vector3 position;
//----------------------------------------------------------------------------
public PropertyName id => new PropertyName( string.Empty);
//----------------------------------------------------------------------------
NotificationFlags INotificationOptionProvider.flags =>
NotificationFlags.TriggerInEditMode | // このフラグを使用して、編集モードで通知を送信します。
NotificationFlags.Retroactive | // 通知時間後に再生が開始された場合に通知を送信するには、このフラグを使用します。
NotificationFlags.TriggerOnce; // このフラグを使用して、ループ時に一度だけ通知を送信します。
} // class PositionMarker
シグナル受信側
//----------------------------------------------------------------------------
// シグナル受信
public void OnNotify(
UnityEngine.Playables.Playable origin,
UnityEngine.Playables.INotification notification,
object context
)
{
if( notification is PositionMarker)
{
if( rigidbody != null) rigidbody.position = (notification as PositionMarker).position;
transform.position = (notification as PositionMarker).position;
}
}
フラグは3種類。
シグナルで座標を設定する際に、エディット中だと OnNotify が呼ばれず、小一時間悩んだ。