【Unity】Unity Timeline入門:カットシーンとシネマティック演出の作り方

作成: 2026-02-05

Unity Timelineの使い方を解説。アニメーション、オーディオ、カメラの動きを時間軸で管理し、カットシーンやシネマティック演出を作成する方法を紹介します。Cinemachineとの連携も詳しく解説。

概要

「カットシーンを作りたい…」「ボス登場演出を作りたい…」「映画のようなカメラワークを実現したい…」

ゲーム開発では、このような演出の課題に直面することがあります。Timeline は、ゲーム内のアニメーション、オーディオ、カメラの動きなどを時間軸に沿って編集・管理できる機能です。映像編集ソフトのタイムラインと同じ概念で、コードを書かずに視覚的にイベントシーケンスを作成できます。

構成要素

Timelineは以下の要素で構成されています。

要素説明
Timeline Assetタイムラインの設定を保存するアセットファイル
Playable DirectorGameObjectにアタッチして、Timelineを再生するコンポーネント
Track特定の要素(アニメーション、オーディオなど)を制御する時間軸
Clipトラック上に配置される個別の要素

主要なトラックの種類

Activation Track

GameObjectのアクティブ/非アクティブを時間軸で制御します。敵の出現、UIの表示切り替えなどに使用します。

Animation Track

既存のアニメーションクリップを再生したり、Timeline内で直接キーフレームアニメーションを記録できます。キャラクターの動き、オブジェクトの移動・回転などを制御します。

Audio Track

BGMや効果音を時間軸に配置します。複数の音声を同期させて再生したり、ボリュームやピッチの調整も可能です。

Control Track

Prefabやネストされたタイムライン、Particleシステムを制御します。

主な使用例:

  • ネストされたTimeline: 別のTimelineを再生(複雑な演出を分割管理)
  • Particle System: エフェクトの再生タイミングを制御
  • Prefabのインスタンス化: 特定タイミングでPrefabを生成・破棄

Signal Track

特定のタイミングでイベントを発火します。Signal Receiverと組み合わせて、外部システムと通信できます。カスタムロジックの実行、UIの更新、ゲーム状態の変更などに使用します。

Cinemachine Track

Cinemachineの仮想カメラを制御します。複数のカメラビューを切り替え、映画的なカメラワークを実現します。

Cinemachine 3.xの主な変更点:

  • CinemachineVirtualCameraCinemachineCamera
  • CinemachineBrainの設定がカメラコンポーネントに統合
  • CinemachineComposerCinemachineRotationComposer
  • CinemachineTransposerCinemachineFollow
  • CinemachineOrbitalTransposerCinemachineOrbitalFollow

使用しているCinemachineのバージョンを確認し、適切なコンポーネント名を使用してください。

基本的な使い方

セットアップ手順

1. Timelineアセットの作成

  • Projectウィンドウで右クリック → Create → Timeline
  • または、Window → Sequencing → Timeline でウィンドウを開き、Createボタンをクリック

2. Playable Directorの設定

  • 空のGameObjectを作成
  • TimelineアセットをHierarchyのGameObjectにドラッグ&ドロップ
  • 自動的にPlayable Directorコンポーネントが追加される

3. トラックの追加

  • Timelineウィンドウで「+」ボタンまたは右クリック
  • 追加したいトラックの種類を選択
  • または、GameObjectをTimelineウィンドウにドラッグ&ドロップ

4. クリップの配置

  • トラックにアニメーションクリップやオーディオクリップをドラッグ
  • または、Recordingモードで直接キーフレームを記録

Recording(記録)モード

  1. トラックの赤い丸ボタンをクリックして記録開始
  2. タイムラインの時間を移動しながら、オブジェクトのTransformやプロパティを変更
  3. 変更内容が自動的にキーフレームとして記録される
  4. 記録モードを終了すると、アニメーションクリップが生成される

Recorded Clip: 生成されたクリップはTimelineアセット内に Recorded Clip として埋め込まれます。後から通常のAnimationClipに差し替えたり、Projectウィンドウに抽出して再利用することも可能です。

Cinemachineとの連携

CinemachineはUnityの高度なカメラシステムで、仮想カメラを使ってプロ品質のカメラワークを実現します。

連携手順

1. Cinemachine Trackの追加

Timelineに「Cinemachine Track」を追加し、シーン内のCinemachine Brainを持つカメラをバインドします。

2. Virtual Cameraの配置

シーン内に複数のCinemachine Virtual Cameraを配置し、各カメラで異なるアングル、フォロー対象を設定します。

3. カメラショットの作成

Cinemachine TrackにVirtual Cameraをドラッグ&ドロップします。クリップの長さでカメラの表示時間を調整し、クリップを並べることでカメラの切り替えを実現します。

4. ブレンドの調整

クリップ間のブレンド時間を調整して、スムーズなカメラ遷移やカットのような切り替えを設定します。

実践的な使用例

カットシーンの作成

  1. ストーリーの流れを計画
  2. 必要なカメラアングルを決定
  3. キャラクターのアニメーションを配置
  4. セリフやBGMを追加
  5. カメラワークを調整
  6. エフェクトやUIを追加

ゲーム開始演出

トラック内容
Activation Trackタイトルロゴの表示
Cinemachine Trackカメラのズームイン
Audio TrackBGMの再生
Animation TrackUIのフェードイン
Signal Trackゲームプレイへの移行

ボス登場演出

トラック内容
Signal Trackプレイヤーの移動停止
Cinemachine Trackカメラをボスに向ける
Animation Trackボスの登場アニメーション
Audio Track効果音と音楽の再生
Activation Trackボス名の表示
Signal Track戦闘開始

スクリプトからの制御

Timelineの再生制御

using UnityEngine;
using UnityEngine.Playables;

public class TimelineController : MonoBehaviour
{
    PlayableDirector director;

    void Start()
    {
        director = GetComponent<PlayableDirector>();
    }

    public void PlayTimeline()
    {
        director.Play();
    }

    public void PauseTimeline()
    {
        director.Pause();
    }

    public void StopTimeline()
    {
        director.Stop();
    }

    public void JumpToTime(double time)
    {
        director.time = time;
        director.Evaluate();  // Pause中も即座に反映
    }

    public void SetStartTime(double time)
    {
        director.initialTime = time;  // 再生開始位置を指定
    }

    // スクラブ:スライダーと連動させる場合
    public void OnSliderChanged(float normalizedTime)
    {
        director.time = normalizedTime * director.duration;
        director.Evaluate();  // プレビュー用途でも使用可能
    }

    void OnEnable()
    {
        director.played += OnTimelinePlayed;
        director.paused += OnTimelinePaused;
        director.stopped += OnTimelineFinished;
    }

    void OnDisable()
    {
        director.played -= OnTimelinePlayed;
        director.paused -= OnTimelinePaused;
        director.stopped -= OnTimelineFinished;
    }

    void OnTimelinePlayed(PlayableDirector pd)
    {
        Debug.Log("Timeline started!");
    }

    void OnTimelinePaused(PlayableDirector pd)
    {
        Debug.Log("Timeline paused!");
    }

    void OnTimelineFinished(PlayableDirector pd)
    {
        Debug.Log("Timeline finished!");
    }
}

Signal Receiverの使用

  1. Signal Assetを作成(Project右クリック → Create → Signal)
  2. Signal Trackを追加し、Timelineウィンドウ左側のバインドフィールド にSignal Receiverを持つGameObjectを設定
  3. Signal TrackにSignal Emitterを配置
  4. GameObjectにSignal Receiverコンポーネントを追加
  5. Signalに対応するメソッドを登録
using UnityEngine;

public class CutsceneEventHandler : MonoBehaviour
{
    // Signal Receiverから呼び出されるメソッド
    public void OnBossAppear()
    {
        Debug.Log("ボスが登場しました!");
        // プレイヤーの移動を停止、UIを表示など
    }

    public void OnBattleStart()
    {
        Debug.Log("戦闘開始!");
        // ゲームの状態を戦闘モードに変更
    }
}

Signal Receiverの設定手順:

  1. Signal Receiverコンポーネントを開く
  2. Add Reaction をクリック
  3. 使用するSignal Assetを選択
  4. 対象GameObjectとメソッドを指定

ランタイムでのバインド変更

実務で頻出するパターンとして、ランタイムでトラックのバインド先を変更できます。

// 別のキャラクターに差し替える例
foreach (var output in director.playableAsset.outputs)
{
    if (output.streamName == "PlayerAnimation")
    {
        director.SetGenericBinding(output.sourceObject, newCharacter);
    }
}

次のステップ: 独自のトラックを作成したい場合は、TrackAsset(トラック本体)、PlayableAsset(クリップデータ)、PlayableBehaviour(実行時の振る舞い)の3クラスを継承してCustom Trackを実装できます。

よくある課題と解決策

課題1: Timelineが再生されない

  • Playable DirectorのPlay On Awakeが有効か確認
  • Timelineアセットが正しく設定されているか確認
  • トラックにバインドされているオブジェクトが存在するか確認

課題2: アニメーションが反映されない

  • Animation TrackにAnimatorコンポーネントが正しくバインドされているか確認
  • Animatorの他のレイヤーやステートマシンと競合していないか確認
  • Recordingモードが終了しているか確認

AnimatorとAnimation Trackの競合解決:

  • Avatar Mask を使って、Timelineで制御する部位を限定する
  • Track weight を調整して、Timelineの影響度を制御する
  • Timeline再生中は Animatorのステートマシンを無効化 する

課題3: 再生終了後にオブジェクトが元の状態に戻る

Playable Directorの Wrap Mode を確認してください。

Wrap Mode動作
Hold最終フレームの状態を維持
Loop繰り返し再生
None再生終了後に元の状態に戻る

よくある問題: デフォルトのNoneでは、キャラクターの位置やプロパティが再生前の状態に戻ります。カットシーンでは通常Holdを使用します。

課題3.5: Update Methodの選択

Playable Directorの Update Method を用途に応じて選択してください。

Update Method用途
Game Time通常のゲームプレイ(Time.timeScaleの影響を受ける)
Unscaled Game Timeポーズ中のUI演出など(Time.timeScaleの影響を受けない)
DSP Clock音声同期が重要な場合
Manualスクリプトで完全に制御する場合

課題4: カメラが切り替わらない

  • Cinemachine Brainがメインカメラにアタッチされているか確認
  • Virtual Cameraのプライオリティが正しく設定されているか確認
  • Cinemachine TrackにCinemachine Brainがバインドされているか確認

課題5: Signalが発火しない

  • Signal Receiverが正しいGameObjectにアタッチされているか確認
  • Signal AssetがSignal Emitterに設定されているか確認
  • Signal ReceiverにReactionが登録されているか確認

ベストプラクティス

命名規則

  • Timelineアセット: Timeline_CutsceneName
  • トラック: 役割が分かる名前(例: Track_PlayerAnimation
  • Signal Asset: Signal_EventName

整理整頓

  • 関連するTimelineアセットは専用フォルダにまとめる
  • トラックは種類ごとにグループ化
  • 長いTimelineはマーカーで区切る

パフォーマンス

  • 不要なトラックやクリップは削除
  • 高解像度のアニメーションは圧縮
  • 複雑なTimelineは分割して管理
  • Addressablesで必要に応じてロード/アンロード

まとめ

Timelineは、カットシーンやシネマティック演出を作成するための強力なツールです。

  • Activation Track - オブジェクトの表示/非表示を制御
  • Animation Track - アニメーションを時系列で管理
  • Audio Track - BGMや効果音を配置
  • Cinemachine Track - 映画的なカメラワークを実現
  • Signal Track - イベントを発火してゲームロジックと連携

コードを書かずに視覚的に演出を作成でき、Cinemachineとの連携でプロ品質のカメラワークも実現できます。