【Unity】Cinemachineを使った三人称視点カメラの作り方

三人称視点カメラの作り方 ゲーム開発

Unityで三人称視点の3Dゲームを作るときに悩ましいことの一つとして「カメラの移動処理の作り方」が挙げられると思います。幸いUnityには「Cinemachine」というカメラワーク作成パッケージがあるので、実はC#スクリプトを1行も書かなくても高品質なカメラワークを実現できるのですが…そうは言ってもCinemachineは設定項目の意味がよく分からん!という方は多いのではないでしょうか。

そこでここではCinemachineを使って良い感じの三人称視点カメラを作る方法をご紹介していきますね。

そもそもCinemachineとは?

まずはじめに、そもそも「Cinemachineって何?」という方もいらっしゃるかと思いますので、ごく簡潔に説明しておきます。Cinemachineとは

高品質なカメラワークをスクリプトを書かずに実現できる

のが特徴のUnityの公式パッケージです。詳しい紹介はUnityの公式サイトに載っているのでそちらをご覧ください。

Cinemachine
Unity の Cinemachine を使用することで、ターゲットの追跡、組み立て、ブレンド、カットなどの複雑なカメラワークがどれくらい簡単かつ直感的になるかについて説明します。

キャラクターを自由に見回せる三人称視点カメラの作り方

さて、それではここからが本題で三人称視点カメラの作り方を説明していきます。まあ一口に「三人称視点のカメラ」といっても

  • キャラクターの背後を追従するだけのカメラ
  • キャラクターを追従し、マウスで周囲を自由に見回せるカメラ

などいくつかのパターンがあるのですが、今回は下のGIFのような2番に近いカメラを作ってみましょう(※例えば、主人公がかわいい女の子だったら色々な角度から眺めることができた方がいいですよね)。

Cinemachine 三人称視点カメラの例

(画像クリックでGIF再生)

というわけで主な作業手順は次の通りです。

  1. 新しい「Cinemachine FreeLook Camera」を作る
  2. 「Cinemachine FreeLook」の設定を行う
  3. Input Systemを使っている場合は必要な設定を行う

それぞれ詳しく見ていきましょう。

手順1:新しい「Cinemachine FreeLook Camera」を作る

はじめに、パッケージマネージャからCinemachineをインポートしたら「Cinemachine FreeLook Camera」を作成します。メニューバー→「Cinemachine」→「Cinemachine FreeLook Camera」を選びましょう。

そうすると「CM FreeLook」というゲームオブジェクト(仮想カメラ)が作成され、ついでにシーンにあるメインカメラに「Cinemachine Brain」というコンポーネントがアタッチされると思います。これで下準備は完了です。

ちなみに補足しておくと、Cinemachineは

  1. まず仮想カメラが動く
  2. 仮想カメラの動きを元にしてメインカメラが動く

というような手順を踏んで動作します。これによって、例えば複数の仮想カメラがあればそれらの動きをブレンドしたりすることが可能です。詳しく知りたい方はググってみてください。

手順2:「Cinemachine FreeLook」の設定を行う

次に「Cinemachine FreeLook」コンポーネントの設定を行います。デフォルト値だとカメラが気持ち悪い動きをしてしまうので、項目が多くて大変ですが一つ一つ丁寧に設定していきましょう。主な設定項目は次の通り。

  • Follow
  • LookAt
  • Axis Control
  • Orbits
    • TopRig
    • MiddleRig
    • BottomRig

Follow

カメラが追尾する対象を登録します。ここではプレイヤーキャラクターを登録してください。

LookAt

カメラが向く対象を登録します。上と同じく、ここではプレイヤーキャラを登録しましょう。

Axis Control

入力軸の設定です。今回はFreeLookCameraなので、X軸とY軸の入力を扱います。

Axis Control

  • Y Axis:
    Y軸方向の入力(つまり、上下の入力)を設定します。Speedの値が大きすぎると視点が急に動いて3D酔いの原因になってしまうため、「1」前後が良いと思います。
  • Y Axis Recentering:
    一定時間後にY軸の入力を元に戻すか。チェックすると、一定時間後にRecentering Time秒かけて視点を元に戻します。これはお好みで設定してください。
  • X Axis:
    X軸方向の入力(つまり左右の入力)を設定します。こちらはSpeedの値を「150」前後にすると良いと思います。もし角度制限をつける場合は、「Value Range」の項目で角度を指定してください。

Orbits

カメラがどのように被写体の周囲を回るかを設定します。

Orbits

  • Binding Mode:
    カメラの回転の制約方法。いくつかありますが、ここでは「Lock To Target With World Up」を選択します。詳しい説明はCinemachineのマニュアルを参照してください。
  • BodyのDamping:
    値を0より大きくすると、カメラがターゲットを遅れて追従するようになります。お好みで設定していただいて構いませんが、個人的に左右や上下移動はピッタリ追従するのが良いかなと思ったので上記のような設定にしてあります。
  • Aim:
    ターゲットの方向を向くときの向き方を指定します。
    まず、今回はプレイヤーキャラクターのピボットが(0, 0, 0)でそのままだとカメラがキャラクターの足元を向いてしまうので、「Tracked Object Offset」のYを「1」としました。あとは色々な設定項目がありますが、上記のような設定値にすると良い感じになりました。

手順3:Input Systemを使っている場合は必要な設定を行う

最後に、Unityの公式パッケージの一つ「Input System」を使っている場合は追加の設定を行う必要があります(※旧式のInput Managerを使っている場合はこの手順は不要です)。というのは、Cinemachineのカメラを動かすための入力方式には旧Input Managerが採用されているので、そのままでは新しいInput Systemの入力を受け付けてくれないからです。

ではどうすれば良いのかと言うと、仮想カメラに「Cinemachine Input Provider」というコンポーネントをアタッチして簡単な設定を行います。「XY Axis」という項目があるので、そこにマウス入力を受け取るためのアクションを設定しましょう。

Cinemachine Input Provider

これでCinemachineでInput Systemの入力を受け取れるようになります。

おわりに

以上、Cinemachineを使った三人称視点カメラの作り方について一通り説明してきました。すでに書いた通り、Cinemachineは設定項目が多いため慣れないと大変だと思いますが、一つ一つ調べながらゲームに合う設定を行って頂ければと思います。

この記事がUnityでのゲーム開発のお役に立てば幸いです。