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

作成: 2026-02-05最終更新: 2026-07-10

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

ボス登場の演出を作ろうとして、コルーチンの中にWaitForSecondsを並べたことはありませんか? 「カメラが寄って、1.5秒後にボスが吠えて、その0.5秒後にBGMが変わって、名前が表示されて……」——時間調整のたびにコードを書き換えて再生、の繰り返し。演出の「秒単位の調整」はコードで書くと地獄です。

それを映像編集ソフトのように解決するのが Timeline です。アニメーション、オーディオ、カメラの動きを時間軸のレーンに視覚的に並べて編集でき、タイミング調整はクリップをドラッグするだけになります。

Timelineのイメージ。編集卓のレーンにクリップを並べると、上のプレビューステージでキャラクター・カメラ・音が同期して再生される

この記事でわかること

  • Timelineの構成要素(Timeline Asset・Playable Director・Track・Clip)
  • 主要トラックの使い方(Animation・Audio・Activation・Signal)
  • Cinemachine連携によるカメラ切り替え演出
  • スクリプトからの再生制御とよくあるつまずき
  • 実践:ボス登場演出をTimelineで組む

Sponsored

構成要素

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

Timelineの構成要素。Timeline Asset(演出の設計図)をPlayable Director(再生する監督)が再生し、中身はTrack(時間軸のレーン)とClip(個別の要素)でできている
要素説明
Timeline Assetタイムラインの設定を保存するアセットファイル
Playable DirectorGameObjectにアタッチして、Timelineを再生するコンポーネント
Track特定の要素(アニメーション、オーディオなど)を制御する時間軸
Clipトラック上に配置される個別の要素

主要なトラックの種類

よく使う5種類を押さえれば、演出の大半は組めます。

主要トラック5種の模式図。Activation(表示のオン・オフ)、Animation(動き)、Audio(音)、Cinemachine(カメラ切り替え)、Signal(イベント発火)のレーンにクリップが時間軸で並ぶ

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のバージョンを確認し、適切なコンポーネント名を使用してください。

Sponsored

基本的な使い方

セットアップ手順

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. ブレンドの調整

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

Sponsored

実践:ボス登場演出をTimelineで組む

アクションのボス登場、RPGの重要イベント、ホラーの「開かずの扉が開く」瞬間——複数の要素(カメラ・アニメ・音・UI)を秒単位で同期させる演出は、Timelineの主戦場です。Cinemachine入門の実践 ではPriority切り替えのコードでボス登場を組みましたが、要素が3つを超えたらTimelineに乗り換えるのが正解です。ボス登場を通しで組みます。

ボス登場演出のタイムライン。Signalでプレイヤー停止→Cinemachineでボスへカメラ→Animationで登場の咆哮→Audioで効果音とBGM→Activationでボス名UI表示→Signalで戦闘開始、が時間軸に並ぶ
  1. 土台: 空のGameObject「BossIntroCutscene」にTimeline_BossIntroを作成します。Playable DirectorのPlay On Awakeはオフ(戦闘エリア進入時にスクリプトから再生します)。
  2. Signal Track(開始): 0秒地点にSignal Emitterを置き、OnCutsceneStart——Signal Receiver経由でプレイヤーの操作を止めます。
  3. Cinemachine Track: ボスを正面から捉えるカメラのクリップを配置。前後のクリップと少し重ねて、寄っていくブレンドを作ります。
  4. Animation Track: ボスの登場アニメーション(起き上がって咆哮)を配置します。
  5. Audio Track: 咆哮の効果音とBGMの切り替わりを、アニメーションの山に合わせて配置します。波形を見ながらドラッグで合わせられるのがTimelineの醍醐味です。
  6. Activation Track: ボス名のUIオブジェクトを、咆哮の直後の区間だけアクティブにします。
  7. Signal Track(終了): 最終地点にSignal Emitterを置き、OnBattleStartでプレイヤーの操作を返して戦闘開始です。

再生ヘッドを動かしながら、全要素のタイミングをドラッグだけで調整できることを確かめてください。「咆哮を0.3秒遅らせたい」がコード修正なしの3秒作業になります。

ポイントは2つです。 「ゲームロジックとの出入り口はSignalに集約する」(Timelineは演出だけを持ち、開始・終了の通知でゲーム側と握手します。演出とロジックが絡まりません)と、 「Wrap ModeをHoldにする」(デフォルトのNoneだと、再生終了の瞬間にボスが登場前の位置へ巻き戻ります。カットシーンの定番ハマりどころです)。

そのほかの定番の使い所

演出使うトラック
ゲーム開始演出Activation(ロゴ)+Cinemachine(ズームイン)+Audio(BGM)+Signal(開始通知)
宝箱を開けるカットAnimation(フタ)+Audio(ファンファーレ)+Control(キラキラのParticle)
エンディングロールAnimation(スクロール)+Audio(テーマ曲)

スクリプトからの制御

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 - イベントを発火してゲームロジックと連携
  • 要素が3つを超える演出は、コルーチンではなくTimelineへ。ロジックとの接点はSignalに集約

コードを書かずに視覚的に演出を作成でき、Cinemachineとの連携でプロ品質のカメラワークも実現できます。あなたのゲームの「見せ場」、いまコルーチンのWaitForSecondsで管理していませんか?