UnityのTimelineとCinemachineは、シネマティクス演出やカットシーンを制作するための強力なツールセットです。しかし、これらを組み合わせて「カメラの切り替え(ブレンド)」を行う際、キャラクターが一瞬Tポーズ(バインドポーズ)に戻って描画され、カメラの追従位置が急激にズレてガタつくという重篤なグリッチが頻繁に発生します。

不具合の具体的な症状

TimelineでCinemachine Shot Trackを使用し、バーチャルカメラ(Virtual Camera)AからBへカメラを切り替える、あるいはトランジション(ブレンド)させる際、以下の現象が起きます。

  • 切り替わったまさにその1フレームだけ、キャラクターのメッシュが直直不動(Tポーズ)の初期姿勢になる。
  • カメラがキャラクターの頭部や体(Follow / LookAt)を追随する設定になっている場合、カメラが一瞬だけワールド原点や足元の初期位置を向いてしまい、激しい画面の揺れやワープが発生する。
  • エディタ再生時(Play Mode)には発生しないことがあるが、ビルドした実機(特にモバイルやVR、またはフレームレートが低下した環境)で頻出する。

不具合の原因とライフサイクル

この現象の根本的な原因は、「Animatorのポーズ書き込みタイミング」と「Cinemachineの追跡位置計算タイミング」が同一フレーム内で逆転してしまう不整合(Execution Orderのズレ)にあります。

通常、キャラクターのアニメーションはTimelineが生成するPlayableGraphによって評価され、Animatorを通じてボーンのTransformにポーズが書き込まれます。しかし、以下の条件が重なるとタイミングの隙間が生まれます。

  1. Animator Controllerが未設定(None)の場合:
    TimelineのAnimation Trackは、Animator Controllerが設定されていなくてもアニメーションを再生できます。しかし、Controllerが存在しないと、Timelineのブレンド境界やクリップの切り替わり時にAnimatorの内部ステートがクリーンアップされ、一時的にTransformが初期ポーズ(Tポーズ)にクリアされる挙動になります。
  2. アップデート順序(Update Timing)のズレ:
    Playable DirectorのUpdate Modeが「DSP Clock」などの特殊なモードだったり、AnimatorのUpdate Modeが「Normal」かつCinemachine BrainのUpdate Methodが「Smart Update / Late Update」になっていない場合、アニメーションポーズがTransformに反映されるよりも先に、Cinemachineが古いフレーム(またはリセットされたフレーム)のTransform位置を参照してカメラの位置を計算してしまいます。
TimelineとCinemachineの連携時に発生する1フレームのTポーズ(初期姿勢)グリッチとカメラブレの解決手順 troubleshooting diagram

図:タイムライン切り替え時の評価順序のズレとTポーズ発生のメカニズム

解決アプローチと具体的な対策手順

ステップ1:空のAnimator Controllerをアタッチする(最重要)

最も効果的で必須の対策は、アニメーション対象のAnimatorコンポーネントの「Controller」スロットを空(None)にしないことです。

  1. Projectビューで右クリックし、Create ➔ Animator Controller を選択して新しいコントローラーを作成します(名前は Dummy_Timeline_Controller などで構いません)。
  2. 作成したコントローラーをダブルクリックしてAnimatorウィンドウを開き、中身が完全に空(Entryから遷移するデフォルトステートもない状態、あるいは完全に空のステートが1つある状態)であることを確認します。
  3. Timelineで動かすキャラクターの Animator コンポーネントにある Controller フィールドに、この作成したダミーのコントローラーをアタッチします。

これにより、Timelineの内部評価が切り替わるタイミングでもAnimatorの内部リセット処理が防止され、1フレームだけTポーズに戻る現象を完全にシャットアウトできます。

ステップ2:Playable DirectorとAnimatorのアップデートモードの同期

Timeline全体の時間管理を行うPlayable Directorと、キャラクターのAnimatorの動作タイミングを同期させます。

  • Playable Directorコンポーネント:
    Update ModeGame Time に設定します。これにより通常のゲーム内時間(Updateループ)と同期します。
  • Animatorコンポーネント:
    Update ModeNormal(または Animate Physics でPlayable Directorと一致している状態)に設定します。Keep Animator StateWrite Defaults などの設定がある場合は、アニメーション評価後に初期化値が上書きされないように確認します。

ステップ3:Cinemachine Brainのアップデートメソッドの適正化

メインカメラ(Main Camera)にアタッチされている Cinemachine Brain コンポーネントの更新タイミングを設定します。

  • Update Method プロパティを Smart Update に変更します。
  • キャラクターがRigidbodyなどで物理移動していない(純粋なアニメーション演出の)場合は、手動で Late Update に設定するのも有効です。Late Updateにすることで、そのフレームのAnimatorの姿勢反映(Update内で実行)が100%完了した後にカメラが追随座標を決定するため、カクつきやチラつきを防げます。

ステップ4:TimelineでのAnimation TrackとCinemachine Trackの並び順

非常に稀なケースですが、Timelineウィンドウ内でのトラックの並び順(評価順序)が影響を与えることがあります。

一般的に、同じオブジェクトを制御するトラックが存在する場合、Timelineは上から下の順に評価します。したがって、キャラクターの姿勢を確定する Animation Track を上部に配置し、それに基づいてカメラ位置を決める Cinemachine Track を下部に配置することで、内部的な評価順を最適化できます。

まとめ

TimelineとCinemachineによるシネマティクス演出で発生するTポーズバグは、「Animator Controllerの未設定」「Update Methodの不整合」という、見落としがちな設定の組み合わせが原因です。演出制作に入る前に、すべてのキャラクターに空のAnimator Controllerを割り当てるワークフローをプロジェクト内で標準化しておくことを強く推奨します。