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

作成: 2026-02-05

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

概要

「カメラをキャラクターに追従させたい…」「複数のカメラをスムーズに切り替えたい…」「カメラシェイクを実装したい…」

そこで役立つのが、Cinemachine(シネマシン) です。Cinemachineは、Unityカメラを制御するための公式パッケージです。スクリプトを書かずに、高品質なカメラワークを実現できます。

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

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

インストール方法

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つの主要な要素で構成されています。

要素説明
Bodyカメラの位置を制御(追跡、パス移動など)
Aimカメラの向きを制御(注視、画面内配置など)
Noiseカメラシェイクや手ブレを追加

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

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

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: 追従の滑らかさ

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

実践的な使用例

例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」に障害物のレイヤーを設定

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を活用する - 障害物回避、カメラシェイク、エリア制限など

まとめ

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

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

ぜひ、Cinemachineを活用して、映画的なカメラワークを実現してください。

さらに学ぶために