【Unity】TimelineでOnBehaviourPlayのタイミングでTrackの情報を使って初期化したい
TimelineでTrackでバインドした情報を使って初期化したくなります。その場合のアプローチについてです。
PlayableBehaviourと初期化
Timelineの挙動の根底となる処理はPlayableBehaviourです。このクラスはグラフのタイミングやClipの動くタイミング等で幾つかのコールバックがあります。
- OnPlayableCreate
- OnGraphStart
- OnBehaviourPlay
ただ、このAPIにはTrackへアクセスするAPIが提供されていません。普通、初期化したい場合はTrackに設定した情報を使用するため、Trackにアクセス出来ない地点で死に機能になっています。
これを解決するアプローチですが、多くのフォーラムではProcessFrame(毎フレーム呼ばれる)の初回フレームで初期化を行うという、微妙な方法を推奨しています。
○○MixerBehaviourのOnBehaviourPlayのタイミングで初期化
ソレは流石に微妙だと思うので、OnGraphStartのタイミングでTrackにバインドした情報を取得できるようにします。
正確に言えば、このアプローチはMixerBehaviourを作るタイミングでトラックの情報をセットしておく…というアプローチです。
Trackにセットしたオブジェクトの取得ですが、○○Trackで取得する場合はGetGenericBindingで取得することができます。
あとはMixerをTrackが作っているので、GetBehaviourで対象のミキサーを取得して渡してやれば良いです。
playableDirector.GetGenericBinding(this) as TrackBindingTypeに指定した型
○○Behaviourの場合
○○Behaviourの場合、残念ながらこのアプローチでは取れないみたいです。なので他のアプローチを使うのですが、そのアプローチをど忘れしました。
よって追記予定
サンプル
親オブジェクトを動的に変更するサンプルです。OnBehaviourPlayのタイミングで初期化を行っています。このサンプルは例えばCinemachine Dolly Trackaを使う場合、複数のパスを切り替えるとかに使えそうです。