初めに
ControlTrack
はシーン上のObjectを操作したり、Prefabの生成を制御したりすることができる標準のトラックです
今回はこのControlTrack
にはどのような機能があるのか、そしてそれらの機能はどのように動いているのかを軽く説明しつつ、それに合わせた注意点を私なりにまとめてみました
簡単に言うと**あまり考えずに沢山使うとパフォーマンスに影響出るかもよ?**というのを長々と書き連ねています
ControlTrack
の機能
ControlTrack
にクリップを生成したときにInspectorから編集することができるControlPlayableAsset
にあるパラメータにControlTrack
でできることがまとまっています
Control Activation
Source Game Object
に設定したシーン上のオブジェクト または Prefab
に設定したプロジェクト内のPrefabオブジェクトのActive状態を操作します
Prefab
を設定した場合はSource Game Object
の項目がParent Object
に変わり、そこに設定したシーン上のオブジェクトを親オブジェクトとしてPrefab
をInstantiate
します
クリップの設定されている時間の間に指定したGameObject
またはPrefab
のアクティブ状態をtrue
にします
Post Playback
オプションでクリップの再生終了時にアクティブ状態をどのようにするかを設定できます
PostPlaybackState | 説明 |
---|---|
Active | アクティブ状態にする |
Inactive | 非アクティブ状態にする |
Revert | 再生開始時の状態に戻す |
Control PlayableDirector
InspectorからControlPlayableAsset
を操作する際にAdvanced
のFoldoutを開くと出てくるオプション
Source Game Object
に設定したシーン上のオブジェクト または Prefab
に設定したプロジェクト内のPrefabオブジェクトからPlayableDirector
のコンポーネントを取得してクリップの再生時間や状態を伝えてくれるようになります
Control ParticleSystem
InspectorからControlPlayableAsset
を操作する際にAdvanced
のFoldoutを開くと出てくるオプション
Source Game Object
に設定したシーン上のオブジェクト または Prefab
に設定したプロジェクト内のPrefabオブジェクトからParticleSystem
のコンポーネントを取得してクリップの再生時間や状態を伝えてくれるようになります
Random Seed
にはParticleSystem
のRandom Seed
値に対して任意のシード値を設定できるようになっています
※勝手にランダムな値に初期化されるのでただ使うだけであれば意識する必要はない
Control ITimelineControl
InspectorからControlPlayableAsset
を操作する際にAdvanced
のFoldoutを開くと出てくるオプション
Source Game Object
に設定したシーン上のオブジェクト または Prefab
に設定したプロジェクト内のPrefabオブジェクトからITimelineControl
を継承したコンポーネントを取得してクリップの再生時間や状態を伝えてくれるようになります
Control Children
InspectorからControlPlayableAsset
を操作する際にAdvanced
のFoldoutを開くと出てくるオプション
Source Game Object
に設定したシーン上のオブジェクト または Prefab
に設定したプロジェクト内のPrefabオブジェクトの子オブジェクトに対しても上記の制御機能を伝播させるかどうかを設定します
注意点
Control Activation
このフラグが立ったときに内部で使われるようになるActivationControlPlayable
がOnProcessFrame
内で問答無用にgameObject.SetActive(true)
を呼び続けます
これが何を意味するかというとこのフラグが立っているクリップの数だけgameObject.SetActive(true)
が毎フレーム呼ばれ続けることを意味しています
単体で見るとそこまで処理コストがかかる処理でもないのですが、ControlPlayableAsset
を持ったクリップが沢山同時間に並んでいればいるほどその処理コストが重なっていくことを考えるとあまりこのオプションを使いたくありません
なのでこの機能はどうしても必要なとき以外は切っておくのが良いと思います
※ControlTrack
以外からもそのオブジェクトが操作される可能性があり、状況によっては再生中に外側から非アクティブ状態にされてしまうなどと言った場合は使用したほうが良いでしょう
Control PlayableDirector / ParticleSystem / ITimelineControl
前述の機能の項目の通り、このフラグが立つと各種コンポーネントに対してクリップの再生時間と状態を操作してくれるようになりますが、シーン上のオブジェクトを`SourceGameObjectに設定した場合、内部的に使用してくれるコードの中ではオブジェクトのアクティブ状態を切り替えてくれません
もし制御する想定のオブジェクトのアクティブ状態がオフになるような状況が発生してもクリップからの制御は正しく動作してほしいといった場合はControl Activation
のフラグを立てておく必要があります
そうしないとオブジェクトが非アクティブ状態のままクリップから操作されようとして動かないといったことが起きる可能性があります
※Prefab
を設定したときには、Prefab
をInstantiate
する用のPrefabControlPlayable
が合わせてPlayableGraph
に登録されるのですが、そこではOnBehaviourPlay
(再生開始)とOnBehaviourPause
(再生停止)のタイミングでアクティブの切り替え処理を明示的に呼んでいるため、上記のような考慮は必要ありません
Control Children
このフラグが立つと、制御対象のGameObject
からオプションに合わせたコンポーネントの参照を取得する際にGetComponentsInChildren
メソッドを使うようになります
PlayableGraph
がビルドされるタイミングに一度だけしか呼ばれないのでそこまで気にする必要はないかもしれませんが、階層が深いGameObject
の場合はそれだけ下の階層まで走査していくことになるはずなので処理コストが増える可能性があります
小要素までクリップの再生時間や状態を伝播させる必要がないのであればこのオプションは切っておくほうが無難でしょう
最後に
設定できる項目はシンプルですが、状況によっては使い方に気を配らなければならないケースが出てくるというお話でした
Timline機能をガッツリ使ってカットシーンを作るというような場合などは気をつけておきたいです