【Unity】Unity Cinemachine入門:スクリプトなしで映画的なカメラワークを実現する

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

Unityの公式カメラ制御パッケージCinemachineの使い方を解説。Virtual Camera、カメラシェイク、障害物回避など、スクリプトなしで高品質なカメラワークを実現できます。

映画やアニメのカメラは、追いかけ、寄り、切り替わり、揺れます。同じことをUnityでCamera.main.transformをいじって書こうとすると、切り替えの補間・障害物の回り込み・シェイクの合成——あっという間にカメラ専用の巨大スクリプトが生まれてしまいます。

それを丸ごと引き受けてくれるのが、Unity公式のカメラ制御パッケージ Cinemachine(シネマシン) です。スクリプトほぼゼロで、追従・切り替え・シェイク・障害物回避といった「映画的なカメラワーク」を組めます。

Cinemachineのイメージ。被写体を囲む複数のカメラのうち1台だけがアクティブになり、監督の指揮で滑らかに切り替わっていく

この記事でわかること

  • Cinemachineの基本概念——Cinemachine CameraとBrain
  • Bodyタイプの使い分け(Follow・Position Composer・Third Person Followなど)
  • 実践例——追従・切り替え・カメラシェイク・障害物回避
  • Input System・Timelineとの連携
  • 実践:ボス登場の見せ場カメラを組む

フォローカメラの追従を細かく作り込みたい場合は、姉妹記事 フォローカメラ実践(Dead Zone・Damping・Confiner 2Dのチューニング)も参照してください。

動作確認環境: Unity 2022.3 LTS / Unity 6、Cinemachine 3.x

バージョンに関する注意: 本記事はCinemachine 3.x系を対象としています。Cinemachine 2.x系ではコンポーネント名やAPIが異なります(例:CinemachineVirtualCameraCinemachineCamera)。プロジェクトのバージョンを確認してください。

Sponsored

インストール方法

Cinemachineは、Package Managerからインストールできます。

  1. Unityエディタのメニューから「Window」→「Package Manager」を選択
  2. 左上のドロップダウンメニューから「Unity Registry」を選択
  3. リストから「Cinemachine」を探してクリック
  4. 右下の「Install」ボタンをクリック

Cinemachineの基本概念

Virtual Camera(仮想カメラ)

Virtual Cameraは、シーン内に配置する仮想的なカメラです。実際にはレンダリングを行わず、Main CameraのCinemachine Brainに対して位置・向き情報を送ります。

Virtual Cameraは、以下の3つの主要な要素で構成されています。

Virtual Cameraの3要素。Body=位置を決める(追従など)、Aim=向きを決める(注視など)、Noise=揺れを足す(手ブレ・シェイク)
要素説明
Bodyカメラの位置を制御(追跡、パス移動など)
Aimカメラの向きを制御(注視、画面内配置など)
Noiseカメラシェイクや手ブレを追加

Cinemachine Brain(シネマシンブレイン)

Cinemachine Brainは、Main Cameraにアタッチするコンポーネントです。シーン内のすべてのVirtual Cameraを管理し、どのVirtual Cameraをアクティブにするかを決定します。

Cinemachine CameraとBrainの関係図。通常カメラ・ボス戦カメラ・イベントカメラなど複数のCinemachine Cameraが情報を送り、Brainが一番Priorityの高いカメラを採用�して、実際に映すMain Camera1台を動かす

Virtual Cameraの基本的な使い方

Virtual Cameraの作成

  1. Hierarchyウィンドウで右クリック
  2. 「Cinemachine」→「Cinemachine Camera」を選択

ターゲットの設定

ターゲット説明
Tracking Targetカメラが追跡するターゲット(Body設定に影響)
Look At Targetカメラが注視するターゲット(Aim設定に影響)

主なBodyタイプ

タイプ用途
Do Nothing位置を固定
Followターゲットを追跡(3Dゲーム向け)
Position Composer画面内の特定位置に配置(2Dゲーム向け)
Orbital Followターゲットの周囲を回転
Third Person FollowTPSゲーム向け、肩越しカメラ
Spline Dollyパスに沿って移動

Third Person Follow(TPSカメラ)

TPSゲームで最も使われるカメラタイプです。プレイヤーの肩越しにカメラを配置し、照準操作に対応します。

  1. Cinemachine Cameraを作成
  2. Body を「Third Person Follow」に設定
  3. パラメータを調整:
    • Shoulder Offset: 肩からのオフセット(例:0.5, 0, 0で右肩越し)
    • Camera Distance: プレイヤーからの距離
    • Damping: 追従の滑らかさ
Third Person Follow(肩越しカメラ)の図。プレイヤーを背後から見て、カメラが右肩の上に配置される。Shoulder Offsetで肩からの横ずれ、Camera Distanceで背後への距離を調整する

Cinemachine 2.xからの変更点: 2.x系ではFraming TransposerTransposerなどの名前でしたが、3.x系ではPosition ComposerFollowに変更されています。

Sponsored

実践的な使用例

例1:キャラクターを追従するカメラ

  1. Cinemachine Cameraを作成
  2. 以下を設定:
    • Tracking Target: キャラクターのTransform
    • Look At Target: キャラクターのTransform
    • Body: Follow
    • Follow Offset: (0, 2, -5)
    • Aim: Composer

例2:複数のカメラをスムーズに切り替える

using UnityEngine;
using Unity.Cinemachine;

public class CameraSwitcher : MonoBehaviour
{
    [SerializeField] private CinemachineCamera camera1;
    [SerializeField] private CinemachineCamera camera2;

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Alpha1))
        {
            camera1.Priority.Value = 15;
            camera2.Priority.Value = 5;
        }
        else if (Input.GetKeyDown(KeyCode.Alpha2))
        {
            camera1.Priority.Value = 5;
            camera2.Priority.Value = 15;
        }
    }
}

例3:カメラシェイクを実装する

  1. Virtual Cameraを選択
  2. 「Add Extension」→「Cinemachine Basic Multi Channel Perlin」を選択
  3. Noise Profile を設定(重要):
    • 「Noise Profile」フィールドの右にある○ボタンをクリック
    • 「6D Shake」などのプリセットを選択(Noise Profileが未設定だとシェイクが動作しません)
  4. パラメータを設定:
    • Amplitude Gain: 1.0(振幅)
    • Frequency Gain: 1.0(周波数)

重要: Noise Profileを設定しないと、AmplitudeやFrequencyを変更してもシェイクが発生しません。Unityに付属の「6D Shake」「Handheld_normal_mild」などのプリセットを使うか、独自のNoiseSettingsアセットを作成してください。

using UnityEngine;
using Unity.Cinemachine;

public class CameraShake : MonoBehaviour
{
    [SerializeField] private CinemachineCamera virtualCamera;
    private CinemachineBasicMultiChannelPerlin noise;

    void Awake()
    {
        // Extensionからノイズコンポーネントを取得
        noise = virtualCamera.GetComponent<CinemachineBasicMultiChannelPerlin>();
    }

    public void Shake(float amplitude, float frequency, float duration)
    {
        if (noise == null) return;

        noise.AmplitudeGain = amplitude;
        noise.FrequencyGain = frequency;
        Invoke(nameof(StopShake), duration);
    }

    void StopShake()
    {
        noise.AmplitudeGain = 0f;
        noise.FrequencyGain = 0f;
    }
}

例4:障害物を避けるカメラ

  1. Virtual Cameraを選択
  2. 「Add Extension」→「Cinemachine Deoccluder」を選択
  3. 「Collide Against」に障害物のレイヤーを設定
Sponsored

Input Systemとの連携

Orbital FollowやThird Person Followでプレイヤー入力によるカメラ回転を実装するには、CinemachineInputAxisController を使用します。

設定手順

  1. Virtual Cameraに「Add Component」→「Cinemachine Input Axis Controller」を追加
  2. Input Actionsアセットを作成し、Look(Vector2)アクションを設定
  3. CinemachineInputAxisControllerの「Input Action」に割り当て

コード例(スクリプトから制御する場合)

using UnityEngine;
using UnityEngine.InputSystem;
using Unity.Cinemachine;

public class CameraLookController : MonoBehaviour
{
    [SerializeField] private CinemachineCamera virtualCamera;
    [SerializeField] private InputActionReference lookAction;

    private CinemachineOrbitalFollow orbitalFollow;

    void Awake()
    {
        orbitalFollow = virtualCamera.GetComponent<CinemachineOrbitalFollow>();
    }

    void OnEnable() => lookAction.action.Enable();
    void OnDisable() => lookAction.action.Disable();

    void Update()
    {
        Vector2 lookInput = lookAction.action.ReadValue<Vector2>();
        // Orbital Followの水平回転を更新
        orbitalFollow.HorizontalAxis.Value += lookInput.x * Time.deltaTime * 100f;
    }
}

注意: New Input Systemを使用する場合は、Project SettingsでInput System Packageを有効にしてください。

Extensions(拡張機能)

拡張機能用途
Cinemachine Deoccluder障害物を避けてカメラを移動
Cinemachine Basic Multi Channel Perlin継続的なカメラシェイク(手ブレ、振動)
Cinemachine Impulse Source瞬間的なカメラシェイク(爆発、ヒット)
Cinemachine Follow Zoom距離に応じてFOVを変更
Cinemachine Confiner 2D/3Dカメラをエリア内に制限

Impulse Source(瞬間的なシェイク)

爆発やダメージ時の瞬間的なカメラシェイクには、Impulse Systemが適しています。

using UnityEngine;
using Unity.Cinemachine;

public class ExplosionShake : MonoBehaviour
{
    [SerializeField] private CinemachineImpulseSource impulseSource;

    public void Explode()
    {
        // 爆発位置から衝撃を発生
        impulseSource.GenerateImpulse();
    }
}
  1. 空のGameObjectに「Cinemachine Impulse Source」を追加
  2. Virtual Cameraに「Cinemachine Impulse Listener」を追加
  3. スクリプトからGenerateImpulse()を呼び出す

Timelineとの統合

CinemachineとTimelineを組み合わせることで、カットシーンやイベント演出を簡単に作成できます。

  1. Timelineウィンドウを開く(Window → Sequencing → Timeline)
  2. TimelineにCinemachine Trackを追加
  3. Cinemachine Trackに複数のVirtual Cameraをドラッグ&ドロップ
  4. Virtual Cameraの配置と長さを調整

ベストプラクティス

  • Virtual Cameraの命名規則を統一する - 「VCam_Follow」「VCam_Boss」など
  • Priorityを適切に設定する - 10刻みで設定すると後から挿入しやすい
  • Dampingを調整して滑らかさを制御する - アクションゲームは小さめ、アドベンチャーは大きめ
  • Blend Timeを調整する - 通常は1〜2秒程度が自然
  • Extensionsを活用する - 障害物回避、カメラシェイク、エリア制限など

実践:ボス登場の見せ場カメラを組む

アクションゲームのボス登場、RPGのイベントシーン、レースゲームのゴール演出——「一瞬だけカメラを主役に渡す」見せ場は、この記事で学んだ部品(Priority切り替え+Impulseシェイク)の組み合わせだけで作れます。ボス登場を例に組んでみます。

シーンの準備(コード不要の部分):

  1. 通常のフォローカメラVCam_Follow(Priority 10)はそのまま
  2. ボスを正面から捉えるVCam_BossIntro(Priority 5)を配置——普段はPriorityが低いので使われません
  3. ボスにCinemachine Impulse Source、Main Camera側のCinemachine CameraにImpulse Listenerを追加
ボス登場カメラの流れ。通常��のフォローカメラから、ボス登場でPriorityが上がったボス用カメラへ滑らかに切り替わり、着地の衝撃でImpulseシェイクが走り、数秒後にプレイヤーのカメラへ戻る

あとは登場イベントでPriorityを一時的に逆転させるだけです。

using System.Collections;
using UnityEngine;
using Unity.Cinemachine;

public class BossIntroDirector : MonoBehaviour
{
    [SerializeField] private CinemachineCamera bossIntroCam; // Priority 5
    [SerializeField] private CinemachineImpulseSource landingImpulse;
    [SerializeField] private float introDuration = 3f;

    // ボス登場イベントから呼ぶ
    public void PlayBossIntro()
    {
        StartCoroutine(IntroRoutine());
    }

    private IEnumerator IntroRoutine()
    {
        bossIntroCam.Priority.Value = 20;      // フォロー(10)より高く→自動でブレンド
        yield return new WaitForSeconds(1f);   // カメラが寄り切るのを待つ

        landingImpulse.GenerateImpulse();      // ボス着地の衝撃でシェイク

        yield return new WaitForSeconds(introDuration);
        bossIntroCam.Priority.Value = 5;       // 戻すと自動でプレイヤーへブレンド
    }
}

切り替えの補間・戻りのブレンドはすべてBrainが自動でやってくれるので、コードがやるのは「Priorityの上げ下げ」と「シェイクの発火」だけです。カメラの移動をコードで書いた行は1行もありません。

ポイントは2つです。 「見せ場カメラは置いておいて、Priorityで呼ぶ」(カメラを動的に生成せず、シーンに待機させておくのがCinemachine流です)と、 「切り替えの気持ちよさはBrainのBlend Timeで調整する」(デフォルト2秒。キレのある登場なら0.5秒前後まで詰めます)。もっと複雑なカット割りになったら、コードを卒業して Timeline統合 へ進むのが正解です。

まとめ

Cinemachineは、Unityカメラを制御するための強力なツールです。

  • スクリプトなしでカメラワークを実装できる - インスペクターで設定するだけ
  • アニメーションや地形の変更に自動対応する - 手動調整が不要
  • 高品質なカメラワークを短時間で実現できる - 追従、切り替え、シェイク、障害物回避
  • 見せ場は 「待機させたカメラをPriorityで呼ぶ」。カメラ移動のコードは書かない
  • Timelineとの統合で映画的な演出が可能 - カットシーンやイベント演出

ぜひ、Cinemachineを活用して、映画的なカメラワークを実現してください。あなたのゲームのボス登場シーン、今はどんなカメラで映していますか?

さらに学ぶために