C++幼女先輩

プログラミング成分多め

UNITYタイムラインをカスタマイズするよ

タイムラインとは

ムービーシーンとかカットシーンと呼ばれるもの
カメラワーク、モーション、エフェクト等を定義しておき、実行時にキャラをバインドする事で
同じ動作のムービーを別キャラ(別衣装)で行うことが出来る
例えばモンハンのムービーシーンのような、その時装備しているものと容姿でムービーを再生できる
そのような便利な機能がUNITYにはある

Timelineの作成

メニューの Windows->Sequencies->Timeline でタイムラインのタブを表示
f:id:murasame-labo:20210602143900p:plain

適切なGameObjectを作成しTimelineタブでCreateを押すと
Timeline.playable というファイルが作成される

と同時にPlayableDirectorのコンポーネントが追加される
f:id:murasame-labo:20210602154712p:plain

タイムラインの左側をクリックすると各種のトラックを作成する事が出来る
f:id:murasame-labo:20210602155523p:plain

動画編集などをした事ある人なら分ると思うが、各要素はトラックという単位で区切られ
例えば音声トラックには音声のクリップを複数配置して、タイムライン上でいつ再生するかを設定する
UNITYのタイムラインではさらに複数トラックをトラックグループという単位でまとめる事が可能

UNITYから準備されているトラックは6種類だが、自分でカスタムトラックを作る事が出来る
実際のゲーム開発では、独自のトラックを作る事がほとんどだと思うが
まずはUNITYが提供するトラックを紹介しよう

ActivationTrack

GameObjectの有効化、無効化を制御する
ActivationTrack を作成しタイムライン上で右クリックを行い、Add ActivationClipを選択すると
タイムライン上にActivationClipを作成できる
今回はテストにCubeオブジェクトを作りそれを少しして表示する

シーンにCubeを作りTrackにバインド(左側のNoneにCubeを設定)する
注意するのはこの時のGameObjectはシーン上にインスタンス化されたものを指定する必要があり
Prefab等のインスタンス化されたものは指定できない(後で説明するが、Prefab等を表示する場合は動的にBindingsを設定する必要がある)
クリップを調整して表示非表示のタイムラインを組み、Previewの再生をすると
Game画面にタイムラインのレンダリングが表示される

streamable.com

トラックにオブジェクトをバインディングしたら、PlayableDirectorのBindingsにも同じようにバインディングされています
(というか、同じものです)
f:id:murasame-labo:20210602164541p:plain
PlayableDirectorは再生時にトラックに適切なオブジェクトをバインドしたり、クリップをロードしたりアンロードしたり
全体の司令塔です(だからDirector)

シーンの方もクリップの設定に従ってオブジェクトのON/OFFが切り替わります
(もちろんTransformやらの値も、タイムラインに合わせて変化します)
で、タイムラインで使用するGameObjectは、タイムラインの子に追加すると管理が楽です
f:id:murasame-labo:20210602170544p:plain

AnimationTrack

AnimationTrackは、オブジェクトの移動や回転、アニメーションの再生等を行います
Animatorコンポーネントを持つオブジェクトをBindできます
トラックを右クリックで Add from AnimationClipで再生するアニメーションを選ぶ
当然トラックに複数のアニメーションを並べて連続再生する事も可能
クリップのつなぎ目をオーバーライドさせれば、アニメーションの補間もできます

ClipTransformOffset等を設定すれば、移動アニメーションも可能です
それらの動作に関しては、アニメーションカーブや、キーフレームを設定できます
今回はそのへんは行わず、適当なアニメーションを再生してみます

streamable.com
それっぽくなってきた

AudioTrack

音の再生を行うClipを作成します
動作は推測の通りなので割愛

ControlTrack

シーンあるいはPrefabからオブジェクトを有効化/無効化します
ActivationTrackに似てますが、こちらは主にParticle等を生成する時に使います
タイムライン上で右クリックで、Add from GameObjectします
シーン上のGameObjectを指定する事も可能ですが、今回はPrefabから直接生成します
何か適当なParticleを作成してPrefab化しておきそれを設定します
ParentObjectにシーン上のオブジェクトを指定すれば3D空間上のその位置にパーティクルを出す事が出来ます

f:id:murasame-labo:20210602194212p:plain

SignalTrack

任意のタイミングでイベントを発行する機能です
わりと最近のUNITYで追加されました
今度調べます

PlayableTrask

非常に有用な機能です
スクリプトを書いて独自のトラック、クリップを作成します
だいたいゲームの仕事でプログラマがやるべきは、このトラックの作成です
例えばブレンドシェイプをコントロールしたり、揺れもの、まばたき、目線
その他標準のトラックでは制御できない事をスクリプトで行います

非常に有用ですが、非常に複雑なためこちらは後程調査します