アヒルのある日

株式会社AHIRUの社員ブログです。毎週更新!社員が自由に思いついたことを書きます。

【Unity】TimelineMarkerに手動で通知を行う

こんにちは!いかついプログラマです。

今回は、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関数を呼び出すことが可能になります。

それではまた次回!