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

こじゃら
こじゃら

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

このは
このは

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

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

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

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

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

Cinemachineのインストール

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

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

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

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

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

FreeLook Cameraの適用

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

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

FreeLook Cameraの配置

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

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

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

追従対象の指定

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

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

CinemachineFreeLookのFollowにカメラの追従対象を指定します。
Unityちゃんのようなヒューマノイドの場合は、そのオブジェクトのルートを指定すれば良いでしょう。1ボーンを指定しても良いですが、その場合キャラのボーンアニメーションによってはカメラがブレる原因になるため、静止時は位置が固定となるルートを指定しています。

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

例では、Unityちゃんの頭を注視するように、子階層に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ここでは、Transformはワールド空間における位置と向きを表します。

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

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

CinemachineはデフォルトではUpdateイベントのタイミングでカメラのTransformを更新する設定になっています。

例では、UnityちゃんはFixedUpdateで動かしているので、Main CameraにアタッチされているCinemachineBrainのUpdate MethodをFixed Updateにすれば解決します。

逆に、UnityちゃんがUpdateのタイミングで動いている場合は、Late Updateに設定すれば良いでしょう。3Smart Updateでもブレは解消できますが、その場合スクリプトの実行順序によっては、対象物の1フレーム遅れのTransform値を参照する可能性があるため注意が必要です。

このは
このは

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

さいごに

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

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

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

参考サイト