テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

【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に指定した型

f:id:tsubaki_t1:20180826180357j:plain

 

○○Behaviourの場合

○○Behaviourの場合、残念ながらこのアプローチでは取れないみたいです。なので他のアプローチを使うのですが、そのアプローチをど忘れしました。

よって追記予定

 

サンプル

親オブジェクトを動的に変更するサンプルです。OnBehaviourPlayのタイミングで初期化を行っています。このサンプルは例えばCinemachine Dolly Trackaを使う場合、複数のパスを切り替えるとかに使えそうです。

f:id:tsubaki_t1:20180826182044g:plain

 

gist.github.com