Timelineからトラックが抜け落ちる件
今回はUnityの便利な機能であるTimelineに潜む不具合についてです。
TimelineではTrack毎にノードを指定してアニメーション等を設定することができます。
しかし、UnityにはTimelineが正常に動作しなくなる凶悪な不具合が仕込まれていました…。
前提条件
- アセットバンドル化したプレハブ上でPlayableDirectorを使用してTimelineを再生していること
- 問題のあるデータの後に再生したTimelineが影響を受ける
- Windows環境でもアセットバンドル化していれば発生する
発生する条件
現在、分かっている状況としてはTimelineを再生するPlayableDirectorがプレハブ上で指定されていることです。
PlayableDirector内で指定しているAnimationTrack等のノードですが、実は不要な設定が残ってしまう状況があります。
今回関わってくるのはこのBindingsの部分です。
通常はTimeline上でTrackに紐付けられた数だけBindingsが設定されるようになっています。
しかし、プレハブやTimelineをコピー等して作成するとこの辺りの値が内部的におかしくなることがあります。
内部的にと書きましたが、これは通常の設定では見れないという意味です。
下記がおかしくなった際のPlayableDirectorの設定です。
今回はPrefabをコピーしたのちに無理やりおかしなデータとして作成しました。
ただこの状態では何がおかしいのか特に分かりませんよね?
BindingsもTestがTest2に代わっただけです。
でも実は内部的にはおかしくなっている状況です。
おかしくなっている事実を確認するには下記の方法を使います。
上記の[Inspector]と書かれたタブを右クリックします。
するとデフォルトでは次のように[Normal]が設定されているはずですので[Debug]に変更します
このInspectorのモードを[Debug]にするとUnityの内部設定がいくつか見れるようになります。
そしてBindingsの設定の場合はScene Bindingsという名前で表示されるように変わります。
この時にBindingsとScene Bindingsで項目数が一致している場合は問題ないのですが、
上記のように1つしか設定していないのに複数のScene Bindingsがある場合は他のTimelineのTrackが抜け落ちる可能性があります。
例えばここでコピー前のTestがScene Bindingsに設定されていた場合、
Test2のTimelineを再生後にTestのTimelineを再生しようとするとログには出力されませんが、
Testが紐づけられたAnimation Trackが再生されずに進みます。
※EditorでAssetBundleからロードして実行するとTimelineのWindow上にTrack cannot be loadedと表示されます。
解決方法
解決方法としては下記の2種類です。
PlayableDirectorの再作成
PlayableDirectorを再度作り直してノードの紐づけをおこなえばリンクが正常になります。
これだけで直せます。
InspectorのDebug項目から不要なリンクを削除
今回の問題のあるTimelineの調べ方を使搗てScene Bindingsの項目を出してから、不要なノードのリンクを削除していきます。
Scene Bindingsから削除するだけで済むので簡単です。
ただコピペを繰り返しているとScene Bindingsの中身が多くなっている場合もあるので、その場合はPlayableDirectorを再作成した方が早いかもしれません。
この辺りは楽な方を選んでもらえればいいかと思います。