UE5.5 実験的新機能 GamePlay CameraでリアルなFPS視点

※本サイトはアフィリエイト広告を利用しています。

本日のテーマは実験的新機能 ゲームプレイカメラです

公式のチュートリアルをもとにトップダウンと1人称3人称視点をイチからつくりつつGASPでの実践的な利用方法まで見ていきましょう

ステップ1 ゲームプレイカメラとは

まずは公式のドキュメントで概要を確認しましょう。

レベルに直接置く方法はまだちゃんと整備されていないのかアクタを追加するメニューにはありませんが、ブループリントクラスを作ってゲームプレイカメラアクタを親にしたBPを配置できます

よっしー
よっしー

まぁプラグインコンテンツフォルダから直接置けるかもしれません

カメラ自体にはほとんど設定や処理は持たせずに、詳細欄からカメラアセットとつながっているだけで、参照先のカメラアセットが撮影条件や切り替わり方などを管理します

キャラクターBPにカメラ操作を記述しないのがポイントです

よっしー
よっしー

キャラクターに機能をガシガシ作っている最中でもカメラワークを開発分業可能と。

よっしー
よっしー

ざっくりまとめると、

  • アセットがカメラリグ(撮影設定)とトランジション(切り替わり演出)をリスト管理しつつ、ディレクターの参照を持っている
  • 切り替えはディレクターがする
  • キャラクターなどに付けたGamePlayCameraはアセットを参照するだけ
  • カメラ切り替えのトリガーはplayerの変数などをディレクターから監視

チュートリアル on GASP

それではクイックスタートに倣いつつサードパーソンテンプレートではなくGame Animation Sample Project(以後、GASP)でやってみましょう。

カメラリグだけ追加できれば話が早いのですが、よっしーの環境ではGASPのカメラアセットでリグ追加ボタンを押すと100%クラッシュします

なのでちょっと諦めていたのですが、実際GASP-ALSではリグが大量に追加されているのでやれる人はやれるはずです

FPS化のリクエストが来たので再チャレンジしたところ、チュートリアルの手順で新しく作ればクラッシュしなかったので、今回は新規カメラアセットに置き換えて説明します。

とはいえ、公式のドキュメントと同じ話を同じテキストでしてもあまり意味ないので、GASPに適用するポイントと、なぜそうするのか補足など要点に絞って解説します。先にクイックスタートをみてください。

カメラアセット作成

カメラリグを3つ切り替えたいので「ブループリント」タイプのディレクターを選びます。
1つしかカメラリグを使わない場合はSingle Camera Directorというものでよいです。(StateTreeなどの新しめな方法もあり)

カメラリグ

シーケンスは1つつなぐと次の端子が勝手に増えます。

ブームアームは従来のスプリングアームと同じく取り付け位置を調整するものです。ここに設定があるということはスプリングアームの子にする必要もないということです。

よっしー
よっしー

なのでキャラクタのメッシュに直接カメラがくっついていましたね

コンパイルするとエラーになります。ディレクターの設定がまだなのでエラーですが保存はできます
いったん放置で続けます

サードパーソンの場合は、キャラとは独立してカメラを操作するので、ブームの操作をマウスなどの拡張入力と紐づけます

Dampen Position は手振れを抑える減衰係数みたいなものだと思います。説明がないのとそこまでカメラに詳しくないので適当です

オクルージョンマテリアルは、設定するとカメラと被写体の間を邪魔するものを透過させて被写体を映すという仕組みです。
GASPだと別途邪魔するものの前に回り込むコリジョンの設定があるので設定しても意味がありません。
試すにはこれを止めましょう。(下図赤枠の実行ピン白線を切る)

トップダウン用のカメラはサードパーソンと同じ感じでBoomとFOVとDampenは再利用します
ブームオフセットは10メートル後ろから撮影する設定ですね。
トップダウンなんだから後ろじゃなくて上なはずですが、上にずらすとプレイヤーが映らないので、後ろに伸ばすだけ伸ばしておいて、あとで回転で下に向けます

トランジション

カメラリグごと(または全体共通設定もありますが)に、そのカメラ設定に切り替える際の開始演出と、そのカメラ設定から抜けるときの終了演出を定義できます。

よっしー
よっしー

一瞬で切り替わるスイッチングじゃなくて、1カメが2カメの位置までレールで滑らかに移動する的な

これでリグは完成です。

ディレクター(枠だけ)

このアセットは新規作成時、勝手に開きますが一旦ありさえすればさきほどのカメラアセットがコンパイル成功するようになります。とはいえどの設定を使うか指定しないと意味はありません。

それは一旦お預けで、どのカメラ設定にしたいかをユーザー入力で選択可能にします

カメラアセットの参照

CBP_SandboxCharacterの黒いほうのCameraを選択し、カメラアセットを新しく作ったものに置き換えます。

(普通はクイックスタートのとおり、カメラとアームを削除もしたほうがよいでしょう。GASPでは消す場合切り替え処理もうまく消さないといけませんが。)

チュートリアルで設定されているオートアクティベートは、GASPでは明示的に変更されているので不要です。(先ほどと同じ下図の赤枠の一つ手前のノードです。)

プレイヤー操作でカメラリグ切り替え

この手順は、どのカメラ設定にしたいかのプレイヤー選択の反映です。レベルBPでもできますが、素直に操作キャラのCBPに変数追加しイベントで書き替えましょう。

この情報をカメラディレクターエヴァリュエーターが参照して切り替えをします。ユーザーが希望しても変更しないなども可能です。

ちなみにGASPでは

GASPではマウススクロールで、GASP-ALSでは上下キーでカメラリグを切り替える状態変数の列挙型を変えています。
ただしクイックスタートのように直接変数を公開するのではなく、ブループリントインターフェースが決められていて、これをキャラクターが実装することで別なキャラクターなどにも再利用しやすくなっています

よっしー
よっしー

インターフェースはUSBとかコンセントとかみたいにあらかじめ決められた規格・ルールです。UEでは、このインターフェースもっている人はこの名前でこういうデータを返す関数もっているって感じ。やり取りする客側はインターフェースがあることだけを知っていればよいので、相手を全部ロードする必要がなくなり依存度が下がります(つまりAさんがBさんに担当変わっても気にしなくていい)

GASP-ALSではストレイフ時の左右切り替えでさらに細かく書き換わっていますが、やっていることは同じです。

インターフェース自体の取り付け方は、クラス設定で実装インターフェースににありますね

(次の項目の話を先だしになりますが、)このインターフェースを使うことにより、カメラディレクターエバリュエータはサンドボックスキャラクターに依存することがなくなり単純なアクタ型で参照になっていて、インターフェース経由で情報を取得しています。

よっしー
よっしー

これで別なキャラクターのレベルにも簡単にお引越し・再利用できるみたいですね。

ディレクター(実装)

キャストと同じくそのキャラ固有で定義した変数などの情報が引き出せます。

トップダウン視点は現状はプレイヤーの後ろから撮影している状態です。これを上から見下ろし視点にしましょう

サンドボックスキャラクターの参照からコントローラを取得してSet Control Rotationを設定します。
ピンを分解してピッチをマイナス50度にします。このとき、ロールとヨーが0なのも明示的に0固定する意味があります。
この処理は毎フレーム呼ばれるので、プレイヤー操作でカメラを回転させようとする入力があろうがなかろうが、それを打ち消して強制的に上から見下ろす視点になります

よっしー
よっしー

固定カメラではなく、キャラクターを画面の特定の位置にロックオンするドローンみたいな感じですね

キャラクター自体の制御と独立してカメラ担当が設計できるということです

ただしGASPの場合は一部弱点があり、右クリックなどでエイムすると、カメラの向きにエイムオフセットするので、トップダウンだと下向きになります。
なのでABPでエイムオフセットの条件を工夫する必要があります

よっしー
よっしー

未検討なので割愛しますが、トップダウンの場合は、上下は正面 and/or 自動で敵の高さにエイムしてくれる感じにするのがよくあるパターンかな。

FPS改善

クイックスタートのFPS視点はGASPにはいまいちです

カメラが頭とズレます。これは首はある程度までしか回らず、エイムの時しか足も回らないのでエイムしていなくても常に回転できるようにしたいです

ヨー回転ずれ

キャラクター自体の回転するしないの制御はアニメーションBPで行われています。エイムのフラグで検索すると見つかります。Should Turn In Place その場回転すべきか判定ですね

Wants to Aim 変数を接続切ってエイムに関係なく回れるようにしましょう。チェックを付けるかORごと無くすのを忘れずに

位置ずれ・上下揺れ

今はメッシュの原点 つまり足元を基準にカメラがくっついていてそこからのオフセットで大体目の位置に配置されているだけです

以前の解説のように目の位置にソケットを付けてそこに置きましょう。メッシュを開きます
スケルトンでもかまいませんヘッドボーンを探してソケットを追加します。なんとなくeyeとしました
眼と眼の間に移動してX軸が前になるように向きも調整します

キャラクターに戻りゲームプレイカメラの親ソケットを eye にしましょう
トランスフォームを位置・回転ともにすべて0にリセットします

これで呼吸の頭の揺れに連動するカメラになりました

ただしFPSカメラリグはカプセル中央付近からオフセットする設定が残っているため、カメラリグのほうのオフセットもなくしましょう

それらしくなりましたね

ピッチ回転

そこそこいい感じにFPS視点にできているかと思いますが、ラグドール時に分離しちゃいますね

いっそのことBoomを取り外しちゃうと、カメラ酔いしやすいひとは要注意ですが、頭の揺れに完全連動するカメラになります

よっしー
よっしー

人間は脳が補正してもう少し揺れを抑えた絵に見えていますがボディーカムで揺れ補正なしにしたらこんな感じでしょうね

Boom外す前は回転するときは追従していませんでしたが、メッシュの回転に追従するのでこうなります

あまりにも酔いやすいと思いますのでアニメーションの揺れを減らすかDampenなどで揺れ補正をある程度加えて抑えるかといった調整が必要かと思います

おわりに

これだけ解説しておいてなんですが、私のGASP-ALSの改造プロジェクトからはゲームプレイカメラは一旦消しちゃうことにしました。すでに消し方は解説済ですが、UE5.4時の手法を移植してFPSモード切り替えるところまで次回説明予定です。

コメント

タイトルとURLをコピーしました