こんにちは!いかついプログラマです。
今回は、Unity TimelineのMarkerに手動で通知を行う方法を紹介します。
public static void PushNortification(PlayableDirector playableDirector, double oldTime)
{
if (playableDirector.playableGraph.IsValid())
{
var count = playableDirector.playableGraph.GetOutputCount();
var tracks = (playableDirector.playableAsset as TimelineAsset).GetOutputTracks().ToArray();
for (int i = 0; i < count; i++)
{
var output = playableDirector.playableGraph.GetOutput(i);
var playable = output.GetSourcePlayable().GetInput(i);
var track = tracks[i];
if (track != null)
{
foreach (var m in track.GetMarkers().OfType<Marker>())
{
if (!(m is INotification))
{
continue;
}
bool fire = (m.time >= oldTime && m.time < playableDirector.time);
if (fire)
{
// PushNotificationで通知する
output.PushNotification(playable, m as INotification);
}
}
}
}
}
}
タイムラインに設定したマーカーは、TrackAssetから取得可能です。 TrackAssetはTimelineAsset.GetOutputTracksから取り出します。 通知にはPushNotification関数を用います。 これにより、任意のタイミングでINotificationReceiver実装クラスのOnNotify関数を呼び出すことが可能になります。
それではまた次回!