【Unity】滑らかに(遅れて)追従するカメラを簡単に実装する方法

次のようにキャラクターを追従するカメラワークを実装したいの~

Cinemachineを使えば簡単に素早く実装できるわ!

Cinemachineを用いてキャラクターを追従するカメラワークを実装する方法の解説記事です。

キャラクターを追従するカメラワークはスクリプトでも実装できますが、Cinemachineを使うことで次のメリットが得られます。

主なメリット
  • 遅れて追従するような自然なカメラワークを素早く実装できる
  • 異なるカメラワーク間のブレンドができる
  • 拡張性に優れ、大規模なカメラワークにも柔軟に対応できる

先の動画で示した基本的なカメラワークなら、ノーコーディングの範囲で実現できます。

本記事では、Cinemachineを使って対象物を追従するカメラワークを実現する方法について解説していきます。これを理解すると、滑らかにプレイヤーを追いかけるようなカメラワークを簡単に作れるようになります。

この作品はユニティちゃんライセンス条項の元に提供されています

動作環境
  • Unity2020.3.5f1
  • Cinemachine2.6.4

前提条件

次のように、操作可能なSDユニティちゃんを対象物としてカメラを追従させることを前提とします。

SDユニティちゃんを動かす方法については、以下記事をご覧ください。

【Unity2020版】SDユニティちゃんを操作できるようにする
ユニティちゃん公式ウェブサイトでは、Unityで使える様々なアセットが公開されています。 本記事では、Standard AssetsとSDユニティちゃんモデルを用いて、SDユニティちゃんを自由に走り回れるようにする手順を ...

Cinemachineのインポート

Cinemachineをインポート済みの方は、次の手順までスキップしてください。

メニューのWindow > Package Managerを選択し、Package Managerウィンドウを開きます。

左上のPackages~ボタンをクリックし、Unity Registryを選択します。

左のパッケージ一覧からCinemachineを選択し、右下のInstallボタンをクリックします。

これでCinemachineのインストールは完了です。

バーチャルカメラの設定

Cinemachineをインポート出来たら、SDユニティちゃんを追いかけるカメラワークを作っていきます。

バーチャルカメラの配置

メニューよりCinemachine > Create Virtual Cameraの順に選択し、シーン上にバーチャルカメラを配置します。

注意
Cinemachine2.7.1からメニュー位置がGameObject > Cinemachine > Virtual Cameraに変更になりましたのでご注意ください。詳細は以下記事にまとめてあります。
【Unity】Cinemachine2.7.1以降のメニュー場所
Cinemachineのバージョンが2.7.1になってから、CinemachineメニューがGameObjectメニュー配下に移動されました。 トップメニューには表示されないため、注意が必要です。 GameObjectメ ...

すると、CM vcam1という名前のゲームオブジェクトがシーンに配置されます。
これがCinemachineのバーチャルカメラとなります。

追従動作の設定

ここからは、カメラを対象物に追従させる設定を行っていきます。

バーチャルカメラオブジェクトのCinemachineVirtualCameraコンポーネントをインスペクタに表示します。
そして、FollowLook Atに追従対象のオブジェクトをアタッチします。

Followはカメラ位置の追従対象、Look Atはカメラ向き(照準合わせ)の追従対象となります。

Virtural Camera プロパティーの設定 | Cinemachine | 2.6.0

対象物の設定が出来たら、今度はカメラ側の動きを設定していきます。
BodyTransposerを設定すると、対象物から一定距離を保って追従するカメラワークになります。

Transposer | Cinemachine | 2.6.0

このままだと、カメラが地面の位置にあるため、Follow Offsetを調整して見やすい位置にしましょう。
Follow Offset対象物に対するカメラの相対位置です。

例えば、Yに正の値、Zに負の値を設定すると、対象物を俯瞰するようなカメラワークになります。

実行結果

この状態で実行すると、以下のようなカメラワークになります。

初期設定では、CinemachineVirtualCamera > Body > Binding ModeLock To Target With World Upに設定されているため、常に同じ向きから対象物を注視する動きになります。

例では、キャラクターを背後から俯瞰する設定にしているため、常に背後にカメラが位置する動きになっています。

様々な追従パターンの紹介

自然な追従

対象物の向きによらずカメラを自然に追従させる動きの設定例です。

CinemachineVirtualCamera > Body > Binding ModeSimple Follow With World Upに設定します。

実行結果

人間のカメラマンが対象物を追従するような自然なカメラワークになります。

カメラの向きを固定した追従

カメラ向きを固定させ、カメラ位置だけを対象物に追従させるようにする例です。

CinemachineVirtualCameraを次の赤枠部分のように設定します。

Body > Binding ModeWorld Spaceにすると、対象物のワールド座標基準でカメラが移動するようになります。
また、AimDo nothingにすることで、カメラの回転が無効になります。

実行結果

カメラの位置だけが滑らかに追従するようになりました。

カメラの位置を固定した追従

カメラ位置を固定し、回転だけするカメラワークの設定例です。
いわゆる監視カメラのような動きを実現するものです。

CinemachineVirtualCameraを次の赤枠部分のように設定します。

BodyDo nothingに設定すると、カメラ位置の更新が無効になります。
したがって、何もしないと同じ位置にとどまり続けるようになります。
Cinemachineからの位置更新が無効になるため、スクリプトから位置を別途制御させたい場合にも使える設定です。

AimにはComposerを設定し、対象物にカメラを向け続けるようにします。

実行結果

カメラ位置は固定のまま、向きだけしっかり追従していることが分かります。

さいごに

本記事では、Cinemachineを使ったカメラ追従の実装方法について解説しました。

基本的なカメラワークなら、スクリプトを書かずにハイクオリティな動きを素早く作れます。また、カメラワークの一部をスクリプトで拡張することで、より高度なカメラワークも作れます。

カメラワークを実装するために毎回複雑なスクリプトを書かないといけない悩みも、Cinemachineを活用できれば軽減できるでしょう。

参考サイト