【Unity】自前Signal がエディット中にもNotification を呼んでほしいときの対応

 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 が呼ばれず、小一時間悩んだ。

Add a Comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です