広告 キャラクター関連テク

一人称視点で歩行時の”揺れ”と胴体を表現しよう!

Unreal Engine(UE)で一人称視点で歩行時の”揺れ”と胴体を表現しよう!

一人称視点(ファーストパーソン)でプレイしていると、地面と平行に移動していて現実的ではないと思ったことはありませんか?
今回は話題のゲーム「8番出口」のような、一人称視点での歩行時の揺れを表現する方法をご紹介します!
併せて、下を向いた際に胴体も見えるようにします。

一人称視点で歩行時の揺れを表現
完成イメージ

動作環境

当記事の動作環境は以下の通りです。
バージョンや環境によっては、正常に動作しない可能性があります。

ポイント

OS:Windows11 (Ver 22H2)

GPU:NVIDIA GeForce RTX 3060 Ti (Ver 3.27.0.120)

UE:UnrealEngine5 (Ver 5.3.1)

また、プロジェクトはファーストパーソンプロジェクトの使用を前提とします。

サードパーソンコンテンツをインポート

ファーストパーソンプロジェクトをベースにしていますが、まず初めにサードパーソンコンテンツをインポートします。
対応方針としては、ファーストパーソンプロジェクトをベースにすることで一人称視点でのゲーム性を作成しておき、サードパーソンコンテンツの一部機能を使用して頭の揺れを再現します。

対応方針

サードパーソンキャラクターにはデフォルトで人間の歩行時の自然な動きが組み込まれています。
そこで、サードパーソンキャラクターの頭の動きをファーストパーソンのデフォルトカメラと連動させることで、歩行時の揺れを表現します。

サードパーソンプロジェクトの追加

コンテンツブラウザにて「追加ボタン」を押下して「機能またはコンテンツパックを追加」を選択します。

サードパーソンコンテンツ追加をプロジェクトに追加します。
(少し時間がかかります)

サードパーソンプロジェクトの追加

今回はサードパーソンコンテンツの一部機能を使うだけなので、サードパーソンプロジェクトフォルダは削除して問題ありません。
コンテンツブラウザの「コンテンツ」-「ThirdPerson」を(不要であれば)削除してください。

サードパーソンプロジェクトの削除

ファーストパーソンを編集する

キャラクターを設定する

ファーストパーソンにサードパーソンキャラクターを設定します。

コンテンツブラウザのフォルダを「コンテンツ」-「FirstPerson」-「Blueprints」と辿ります。
そこにある「BP_FirstPersonCharacter」をダブルクリックで開きます。

BP_FirstPersonCharacterの場所
BP_FirstPersonCharacterの場所

続いて、以下の手順でサードパーソンキャラクターを設定します。
ただし、3番目の手順はゲームによってコリジョンをどう扱うか(範囲など)異なるため、各自調整してください。

  1. コンポーネントでMeshを選択
  2. 詳細欄の「メッシュ」-「Skeltal Mesh Asset」に「AKM_Manny_Simple」を設定
  3. 詳細欄の「トランスフォーム」にてコリジョンカプセル(ビューポートの赤枠)にキャラクターが合うよう数値を設定
サードパーソンキャラクター設定
サードパーソンキャラクター設定

次に、コンポーネントのFirstPersonCameraをMeshの下の階層に移動します。
FirstPersonCameraを設定した状態で、詳細欄の「ソケット」-「親ソケット」に”Head”を設定します。

トランスフォームはサードパーソンキャラクターの頭にカメラが重なる程度に移動します。
ただし、先述のコリジョンの位置や、下を向いた時にどの程度キャラクターを見せたいかなどによって値は各自調整してください。

ファーストパーソンカメラの設定

サードパーソンキャラクターの歩行スピードは、ファーストパーソン目線ではやや早い印象があります。
ここは好みですが、最大歩行スピードを変更しておきます。

コンポーネントの下部にある「Character Movement」を選択し、詳細欄の「キャラクタームーブメント:歩行」-「Max Walk Speed」を400~500cm/sに変更します。

MaxWalkSpeedの調整
MaxWalkSpeedの調整

ここまでで一旦コンパイル・保存しておきましょう。

歩行モーションを作る

一旦コンテンツブラウザに戻って、歩行モーションを作成します。

フォルダは任意ですが、コンテンツブラウザのフォルダを「コンテンツ」-「Characters」-「Mannequins」-「Animations」-「Manny」と進んだ先にある「MM_Walk_Fwd」を使用するので、ここでは同じフォルダに作成します。

コンテンツブラウザで何もないところを右クリックし、「アニメーション」-「レガシー」-「ブレンドスペース1D」を選択します。
スケルトンでは、「SK_Mannequin」を選択します。

BlendSpace1D
SK_Mannequin

適切に名前を付けてブレンドスペースを保存します。ここではBodyBlendSpace1Dという名称にしています。
保存したブレンドスペースをダブルクリックで開きます。

MaximumAxisValue

アセット詳細にて、「Axis Settings」-「水平軸」を編集します。
「Name」には”Speed”を、「Maximum Axis Value」にはBP_FirstPersonCharacterに設定した最大歩行スピードと同じ値を設定します。

アセットブラウザから「MM_Idle」を選択し、直左のエリアにドラッグアンドドロップします。
点ができるので、左端(Speed 0.0)に移動します。
同様に「MM_Walk_FWD」を右端(Speed 500.0 ※設定次第で変化)になるように設定します。

モーション設定

ここまで出来たら歩行モーションは完成です。
保存してブレンドスペースを閉じます。

アニメーションブループリントの作成

アニメーションブループリントを作成します。
コンテンツブラウザにて、何もない部分を右クリックして、「アニメーション」-「アニメーションブループリント」を選択します。

アニメーションブループリントの作成

自作キャラの場合は該当するスケルトンを、特になければ「SK_Mannequin」のスケルトンを選択します。

SKマネキンのスケルトンを選択

適切に名前を付けてアニメーションブループリントを保存します。ここではABP_Bodyをいう名称にしています。
保存したアニメーションブループリントをダブルクリックで開きます。

アニメグラフ

以下の手順で設定していきます。

  1. アセットブラウザから先ほど作成したブレンドスペース(ここではBodyBlendSpace1D)を選択し、アニメグラフにドラッグアンドドロップ、Output Poseノードと接続
  2. ブレンドスペース(BodyBlendSpace1D)のSpeedピンから「Promote to Variable」を選択
アニメーションブループリントの作成
Speedピンから「Promote to Variable」を選択する例
ノード接続完成図
ノード接続完成図

イベントグラフ

以下の手順でイベントグラフを作成します。

  1. 既存のTry Get Pawn OwnerノードにGet Velocityノードを接続
  2. Get VelocityノードにVector Lengthノードを接続
  3. 既存のTry Get Pawn OwnerノードとVector LengthノードをSet Speed(作成した変数)に接続
ノード接続例
ノード接続例

これでアニメーションブループリントも完成です。
保存して閉じます。

アニメーションブループリントをファーストパーソンに設定

コンテンツブラウザのフォルダを辿って、「コンテンツ」-「FirstPerson」-「Blueprints」-「BP_FirstPersonCharacter」をダブルクリックで再度開きます。

コンポーネントでMeshを選択した状態で、詳細欄の「Animation」-「Anim Class」に先ほど作成したアニメーションブループリント(ここではABP_Body)を設定します。

ファーストパーソンにアニメーションブループリントを設定

これで完成です!コンパイル・保存します。

完成・調整

完成したら実際にゲームをプレイしてみましょう。
移動時に揺れが再現されていると思います。

一人称視点で歩行時の揺れを表現

しかし、真下を見てみると胴体が透けていたり、逆に胴体が見えなかったりするかもしれません。
カメラの位置次第では、胴体が透過してしまったり、逆に胴体が不自然なくらい後ろ側に見えることがあります。

また、歩行スピードも想定通りかどうかも確認が必要です。

カメラ位置のミスで透過した体
カメラ位置が後ろすぎるために透過した体

カメラ位置や歩行スピードを各自適切に調整してみてください。

まとめ

UE5ではファーストパーソンをベースに、サードパーソンプロジェクトをインポートして一部機能を使うことで、物理計算など難しいことを極力排除してファーストパーソン歩行時の揺れを実装することができます。

-キャラクター関連テク
-