【Unity】三人称視点のカメラワークを簡単に実装する方法

こじゃらこじゃら

三人称視点ゲームのカメラワーク、例えばマウスでグリグリ視点を動かすスクリプトを書いてるんだけど、実装が大変で…

このはこのは

CinemachineFreeLook Cameraを使えばノーコーディングで実装できるわ!

UnityパッケージのCinemachineには、ゲームでよく扱われるカメラワークが用意されています。

CinemachineFreeLook Cameraを使うと、TPSのような三人称視点のカメラワークを簡単に素早く実装できます。

本記事では、このような三人称視点カメラワークの実装手順を解説していきます。

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

動作環境
  • Unity2020.2.2f1
  • Cinemachine2.6.3

スポンサーリンク

Cinemachineのインストール

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

UnityエディタのメニューのWindows > Package Managerの順に選択します。

すると、Package Managerウィンドウが開きます。
左上のPackages~ボタンをクリックし、Unity Registryを選択します。

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

Cinemachineパッケージに緑のチェックマークが付き、InstallボタンがRemoveボタンに変わればインストール完了です。

FreeLook Cameraの適用

ここからが本題です。シーンに三人称視点のカメラワークを適用していきます。

本記事では、キーボード操作で移動できるユニティちゃんが存在するシーンを例にとって解説していきます。追従させたい対象はGameObjectであれば何でも良いので、白い箱でも構いません。

FreeLook Cameraの配置

UnityエディタのメニューからCinemachine > Create FreeLook Cameraを選択します。

注意
Cinemachine2.7.1からメニュー位置がGameObject > Cinemachine > FreeLook Cameraに変更になりましたのでご注意ください。詳細は以下記事にまとめてあります。

すると、ヒエラルキーにはCM FreeLook1という名前のVirtual Cameraが追加されます。これがFreeLook Cameraの正体です。

また、Main CameraにはCinemachineBrainというコンポーネントが自動的にアタッチされます。Cinemachineのカメラ制御を司るコンポーネントです。

追従対象の指定

FreeLook Cameraが配置されただけでは、カメラワークが機能しません。追従させたいオブジェクトを指定する必要があります。

ヒエラルキーのCM FreeLook1オブジェクトを選択し、インスペクターにCinemachineFreeLookを表示します。

CinemachineFreeLookのFollowにカメラの追従対象を指定します。
ユニティちゃんのようなヒューマノイドの場合は、そのオブジェクトのルートを指定すれば良いでしょう。 [1]

次に、Look Atに注視点となるオブジェクトを指定します。カメラの中央に表示させたいオブジェクトです。

例では、ユニティちゃんの頭を注視するように、子階層にLookPosという足元より高い位置にある空オブジェクトを置いて、これをLook Atに指定しています。

実行結果

ここまでの手順を実施し、ゲームを実行するとカメラワークが機能するようになります。

こじゃらこじゃら

ポチポチするだけでここまで出来るなんてすご~い!

このはこのは

カメラの動きもお好みに調整できるわ!
次は調整方法を解説していくね。

カメラワークの調整

三人称視点のカメラワークが最低限動くようになりました。
ここからは、カメラワークを調整していきます。

カメラ回転の速さ・反転設定

デフォルト設定だと、カメラの動きが鈍く感じるかもしれません。
このような場合、Axis ControlのSpeedを大きくすると改善します。

また、カメラの回転が期待した向きと逆になっているかもしれません。
この場合は、Axis ControlのInvertのチェックを反転することで解決します。

例では、次のような設定値にしました。

追従対象とカメラとの距離調整

デフォルト設定だと、対象とカメラとの距離が近すぎると感じるかもしれません。
このような場合、OrbitsのRadiusを調整します。

TopRig、MiddleRig、BottomRigの3種類のRadiusが存在しますが、これはカメラの高さによってカメラの距離を変える表現を実現するためのものです。

これによって、カメラを低くすると、カメラをキャラに寄せるようなカメラワークが実現できます。

キャラを囲むようにするには、RadiusをTopRigは少し小さめ、MiddleRigは大きめ、BottomRigは小さめに設定すると、良い感じになります。

Rigの高さを調整したい場合は、Heightを調整してください。
Spline Curvatureでは高中低の半径の補完曲線の調整ができます。

今回は、次のような設定値にしました。

エイムの滑らかさ調整

デフォルト設定では、カメラの注視点にピッタリ対象物が収まる動きになっています。

この場合、キャラが激しく動いたり震えたりすると、カメラがブレてしまう可能性があります。

これを緩和するために、AimのDamping値を調整します。

TopRig、MiddleRig、BottomRigそれぞれに設定項目があることに注意してください。
Horizontal Damping、Vertical Dampingがそれぞれ横、縦方向の緩やかさとなります。

Damping値が大きくなるほど、注視点に遅れてカメラが向くようになります。

例ではすべてDamping値を1としました。

実行結果

ここまで調整を行った状態で実行してみましょう。

カメラワークの調整が反映されていることが確認できました!
注視点も滑らかに追従するするようになっています。

対象物がカクカクして見える場合の対処法

ここまでの調整を行っても、キャラがブレて見えてしまうことがあります。

考えられる要因としては、CinemachineカメラのTransform更新と、対象物のTransform更新のタイミングが異なっていることが挙げられます。 [2]

例えば、カメラの更新タイミングはUpdateイベントであるのに対し、キャラの移動はFixedUpdateイベントになっている場合です。タイミングがずれている場合は、1フレーム以上前の座標を参照する時があり、結果として対象物とカメラのTransformが一瞬ずれているように見えてしまいます。

このような場合、Cinemachineと対象物の更新タイミングを合わせると解決する場合があります。

Cinemachineはデフォルトでは対象物の更新方式によってVirtualCameraを更新する設定になっています(Update MethodがSmart Updateに選択されています)

Enum CinemachineBrain.UpdateMethod | Package Manager UI website

しかしながら、状況によっては更新タイミングがずれて対象物がカクカク動いているように見えることがあるようです。 [3]

例では、ユニティちゃんはFixedUpdateで動かしているので、Main CameraにアタッチされているCinemachineBrainのUpdate MethodをFixed Updateにすればカクカクする問題は解決します。

逆に、ユニティちゃんがUpdateのタイミングで動いている場合は、Late Updateに設定すれば良いでしょう。 [4]

このはこのは

Cinemachineに限らず、カメラワークを実装する場合は更新タイミングに要注意ね。

Input Systemでカメラ操作をしたい場合

ここまで紹介したカメラのマウス操作は、Input Managerを用いて行っています。

新しいInput Systemを使用したUnityプロジェクトなど、カメラ操作もInput Systemで操作するようにしたい場合、バーチャルカメラオブジェクトにCinemachineInputProviderコンポーネントをアタッチし、Input Systemのアクションを設定することで解決可能です。

この辺の手順は以下記事にまとめましたので、必要な方はご覧ください。

さいごに

今回は、三人称視点のカメラワークをCinemachineのFreeLook Cameraで実装する方法について解説しました。

このように、Cinemachineにはゲームでよく使われるカメラワークのテンプレートが豊富に備わっています。オーソドックスなカメラワークなら、ノーコーディングで実装できるのが強みです。

今回解説した以外にも調整項目がありますので、試行錯誤してより良いカメラワークを目指してください!

参考サイト

スポンサーリンク