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

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

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 6 (6000.x)、Cinemachine 3.x

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

Sponsored

インストール方法

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

  1. Unityエディタのメニューから「Window」→「Package Management」→「Package Manager」を選択(Unity 6.0 では「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 3.x のInspectorでは、Bodyは Position Control、Aimは Rotation Control という欄名で並んでいます。

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

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

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

どのカメラを映すかは Priority の数値で決まり、いちばん高い1台が選ばれます。InspectorではPriorityの欄のチェックを入れてから数値を入れます。チェックがオフのあいだは「(using default)」と表示され、0として扱われます。Play中にInspectorでPriorityを書き換えると、その場でカメラが切り替わるので、コードを書く前に試せます。

Virtual Cameraの基本的な使い方

Virtual Cameraの作成

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

最初の1台を作ると、Main CameraにCinemachine Brainが自動で付きます。

ターゲットの設定

ターゲット説明
Tracking Targetカメラが追跡するターゲット。何もしなければ、向き(Aim)もこの相手に向ける
Look At Target追う相手とは別の相手を見たいときだけ指定する(指定しなければTracking Targetを見る)

主なBodyタイプ

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

Third Person Follow(TPSカメラ)

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

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

壁際でカメラが壁にめり込むときは、Third Person Followの Avoid Obstacles を有効にします(初期状態では無効です)。そのとき Ignore Tag にプレイヤーのタグ(Player)を入れておくと、プレイヤー自身の当たり判定を壁と見なしません。

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

Sponsored

実践的な使用例

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

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

キャラクターが振り向いたときに、カメラも背中側へ回り込んでほしいなら、Followの Binding Mode を Lock To Target With World Up にします(既定の World Space では回り込みません)。

例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;
        }
    }
}

Input.GetKeyDown は旧Input Managerの書き方です。Unity 6 の新しいプロジェクトで反応しないときは、Project Settings > Player の Active Input Handling を Both にします(エディタの再起動が要ります)。

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

  1. Virtual Cameraを選択
  2. Inspectorの「Noise」の欄で「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()
    {
        // Noiseのコンポーネントを取得
        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」に障害物のレイヤーを設定
  4. 「Ignore Tag」にプレイヤーのタグ(Player)を入れる(入れないと、プレイヤー自身が障害物と見なされ、カメラが寄りすぎることがあります)

壁にColliderが付いていないと、障害物として扱われません。

Sponsored

Input Systemとの連携

Orbital Followでプレイヤー入力によるカメラ回転を実装するには、CinemachineInputAxisController を使用します(Rotation ControlのPan Tiltも同じように回せます)。Third Person Followは入力の軸を持たないので、Tracking Targetにしたオブジェクトを自分のスクリプトで回します。

設定手順

  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 Impulse Source瞬間的なカメラシェイク(爆発、ヒット)
Cinemachine Impulse ListenerImpulse 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の「Add Extension」から「Cinemachine Impulse Listener」を追加
  3. スクリプトからGenerateImpulse()を呼び出す

2番を忘れると、何度呼んでも揺れず、Consoleにも何も出ません。カメラを切り替えて使うなら、揺らしたいカメラすべてにListenerを付けます。

Timelineとの統合

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

  1. Timelineウィンドウを開く(Window → Sequencing → Timeline)
  2. TimelineにCinemachine Trackを追加し、トラックの割り当て欄にMain Camera(Cinemachine Brainの付いたカメラ)をドラッグ
  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台とも、Priorityの欄のチェックを入れてから数値を入れる)
  2. ボスを正面から捉えるVCam_BossIntro(Priority 5)を配置——普段はPriorityが低いので使われません
  3. ボスにCinemachine Impulse Sourceを、VCam_FollowとVCam_BossIntroの両方にImpulse Listenerを追加(揺れる瞬間に映っているのはボス用カメラです)
  4. Main CameraのCinemachine Brainで、Default Blendの時間を0.5秒にする(既定の2秒のままだと、1秒後の揺れがカメラの移動中に入ります)
ボス登場カメラの流れ。通常のフォローカメラから、ボス登場で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行もありません。

試すときは、一時的に Start() から PlayBossIntro() を呼びます。再生すると、0.5秒でボスへ寄り、1秒後に画面が揺れ、その3秒後に0.5秒かけてプレイヤーのカメラへ戻ります。ボスの画から戻らないなら、VCam_Follow のPriorityのチェックを見てください。オフだと0として扱われ、5に下げたボス用カメラのほうが勝ちます。

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

まとめ

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

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

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

さらに学ぶために

次に読む学習パスの次の記事
描画・演出

Cinemachineフォローカメラ実践:追従の「気持ちよさ」をチューニングする

この記事を読む
Unity このセクションのノート100