ゲームを作っていると、プレイヤーを追いかけるカメラが欲しくなります。でもカメラの動きを自分でプログラムすると、ガクガクしたり壁にめり込んだりで意外と大変・・・そんなときに使いたいのがCinemachine!Unity6.3 LTSではCinemachine 3が使われていて、以前のバージョンから名前やメニューがかなり変わっています。今回はCinemachine 3でプレイヤーを追いかけるカメラを作るところから、カメラの切り替えまでやってみたいと思います。
Cinemachineでどんなことが出来る?
- プログラムなしで、プレイヤーを追いかけるカメラが作れる
- 追いかけるときの遅れ(ダンピング)や、画面のどこに映すかをインスペクターで調整出来る
- 複数のカメラをなめらかに切り替えられる
- 手ブレやカメラシェイクなどの演出も簡単に足せる
くっそ個人的な意見ですが、Unityでゲームを作るならCinemachineはほぼ必須だと思っています。
プロジェクトの確認
- Unityのバージョンは6.3 LTS
- テンプレートは3D(Universal 3D)
- Cinemachineのバージョンは3.x
- 記事作成時点ではCinemachine 3.1系でした。バージョンが違うと、項目の名前が少し違うかもしれません
プレイヤーは動かせるものなら何でもOKです。
Cinemachineを導入しよう
パッケージマネージャーからCinemachineをインストールします。
- Window>Package Manager
- 左側のUnity Registryを選択
- Cinemachineを探してInstall

スライムUnity6.3でインストールすると3.xが入ります。古い記事に出てくる「Virtual Camera」はCinemachine 2の名前なので、メニューを探しても見つからないです・・・
プレイヤーを追いかけるカメラを作るッ!
Cinemachine Cameraを追加
GameObject>Cinemachine>Cinemachine Cameraを選びます。
- HierarchyにCinemachineCameraが追加される
- Main CameraにCinemachine Brainコンポーネントが自動で追加される
Cinemachine Brainは「今どのCinemachine Cameraを使うか」を決める役割です。Main Camera自体は、Cinemachine Cameraの位置と向きに合わせて動くようになります。


追いかける対象をセット
CinemachineCameraを選択して、インスペクターのTracking Targetにプレイヤーをドラッグ&ドロップします。
- Tracking Target:プレイヤー
これで「誰を追いかけるか」が決まりました。
追いかけ方を決める:Position Control
Cinemachine Cameraの動き方は、Position Control(位置)とRotation Control(向き)の2つで決めます。まずは位置から。
- Position Control:Follow
追加されたCinemachine Followコンポーネントを下記のように設定します。
- Binding Mode:World Space
- Follow Offset:X 0 / Y 5 / Z -8
- Position Damping:X 1 / Y 1 / Z 1
Follow Offsetはプレイヤーから見たカメラの位置です。Y(高さ)とZ(後ろにどれぐらい離れるか)を変えると、見え方が変わります。
Position Dampingは追いかけるときの遅れで、0にするとピッタリくっつき、大きくするとゆっくり追いかけます。


ちなみにBinding ModeをLock To Targetにすると、プレイヤーが振り向いたときにカメラも背中側に回り込みます。見下ろし型ならWorld Space、TPSっぽくしたいならLock To Targetがオススメです。
向きを決める:Rotation Control
次はカメラの向きです。
- Rotation Control:Rotation Composer
これでカメラが常にプレイヤーの方を向くようになります。Cinemachine Rotation Composerの設定で、画面のどこにプレイヤーを映すかを調整出来ます。
- Dead Zone:この範囲の中でプレイヤーが動いてもカメラは向きを変えない
- 最初はチェックが外れているので、チェックを入れてSizeを0.2ぐらいにする
- Damping:向きを変えるときの遅れ
- Target Offset:Yを1.5ぐらいにすると、足元ではなく体の中心あたりを見るようになる


再生してプレイヤーを動かしてみてください。カメラがいい感じに追いかけてくれたら成功!


手ブレっぽい揺れを足す
カメラがピタッと止まっていると、ちょっと機械っぽく見えることがあります。Noiseを使うと、手持ちカメラのような揺れを足せます。
- Noise:Basic Multi Channel Perlin
- Noise Profile:Handheld_normal_mild
- Amplitude Gain:1
- Frequency Gain:1
揺れが強すぎると感じたら、Amplitude Gainを下げてください。ダメージを受けたときにだけ揺らしたい場合は、カメラが揺れる処理を実装する記事で紹介しているImpulseの方が向いています。


カメラを切り替えてみよう
Cinemachineの便利なところは、カメラの切り替えがなめらかなところです。ボタンを押したら寄りのカメラに切り替わるようにしてみましょう。
2つ目のカメラを用意
CinemachineCameraを複製して、名前をZoomCameraにします。
- Follow Offset:X 0 / Y 2 / Z -3(プレイヤーに近づける)
- Priority:チェックを入れて0
1つ目のCinemachineCameraも、Priorityにチェックを入れて10にしておきます。Cinemachine Brainは、Priorityが一番大きいカメラを使います。



Priorityは左のチェックを入れないと数字が入れられないです。チェックが外れているときは0として扱われます!
切り替えのスクリプト
下記スクリプトを作成して、空のゲームオブジェクトに追加してください。InputSystemはUnity6でInputSystemを使うチュートリアルで作ったInputSystem_Actionsを使っています。
using Unity.Cinemachine;
using UnityEngine;
public class CameraSwitcher : MonoBehaviour
{
[SerializeField] private CinemachineCamera zoomCamera;
private InputSystem_Actions inputActions;
private bool isZoom;
private void Awake()
{
inputActions = new InputSystem_Actions();
}
private void OnEnable()
{
inputActions.Enable();
}
private void OnDisable()
{
inputActions.Disable();
}
private void Update()
{
if (inputActions.Player.Interact.WasPressedThisFrame())
{
isZoom = !isZoom;
// 通常カメラ(10)より大きくすると、こちらのカメラに切り替わる
zoomCamera.Priority.Value = isZoom ? 20 : 0;
}
}
}
インスペクターでZoom CameraにZoomCameraをセットします。
スクリプトのポイントをいくつか補足
- usingはUnity.Cinemachine
- Cinemachine 3から名前空間が変わりました。古い記事の
using Cinemachine;ではエラーになります
- Cinemachine 3から名前空間が変わりました。古い記事の
- Priorityを変えるだけで切り替わる
- どのカメラを使うかはCinemachine Brainが勝手に判断してくれるので、スクリプトでMain Cameraを動かす必要はありません
再生してEキーを押すと、カメラがスーッと寄っていくはずです。


切り替えの速さを変える
切り替えの速さはMain CameraのCinemachine Brainで設定出来ます。
- Default Blend:Ease In Out
- Default Blendの右の数値:切り替えにかかる秒数(0.5ぐらいにするとキビキビ切り替わる)
Cutにすると一瞬で切り替わります。



「このカメラからこのカメラの時だけ速く」みたいな細かい指定は、Custom Blendsで出来ますよ!
2Dゲームの場合
2Dの見下ろし型やサイドビューのゲームでは、少し設定が変わります。
- Main CameraのProjectionがOrthographicになっていることを確認
- Position Control:Position Composer
- Rotation Control:なし
Position Composerは、画面のどこにプレイヤーを映すかで位置を決めるコンポーネントです。Dead Zoneを少し広げておくと、プレイヤーが少し動いただけでは画面が揺れなくなります。
カメラがマップの外を映さないようにしたいときは、CinemachineCameraのAdd ExtensionからCinemachine Confiner 2Dを追加して、マップの範囲をPolygon Collider 2Dで指定します。


Cinemachine 2から移行するときの名前の違い
古い記事や古いプロジェクトを見ながら作業するときは、下の表で読み替えてください。
| Cinemachine 2 | Cinemachine 3(Unity6.3) |
|---|---|
| CinemachineVirtualCamera | CinemachineCamera |
| Follow | Tracking Target |
| Transposer | Cinemachine Follow |
| Framing Transposer | Cinemachine Position Composer |
| Composer | Cinemachine Rotation Composer |
| POV | Cinemachine Pan Tilt |
| FreeLook Camera | Cinemachine Camera + Orbital Follow |
| using Cinemachine; | using Unity.Cinemachine; |
あとがき
Cinemachine 3になって名前は変わりましたが、「Tracking Targetで誰を追いかけるか決めて、Position ControlとRotation Controlで動き方を決める」と覚えておけば迷わないと思います。今後のゲーム制作の記事でも、カメラは基本Cinemachineで作っていく予定です。



設定できる項目が多すぎて、全部覚えるのは無理・・・



最初はFollowとRotation Composerだけで十分!慣れてきたら少しずつ触ってみてね!
コメント