キャラクター

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

一人称視点でプレイしていると、平行に移動していて現実的ではないと思ったことはありませんか?今回は一人称視点での歩行時の揺れを表現する方法をご紹介します!

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」に「SKM_Manny_Simple」を設定
  3. 詳細欄の「トランスフォーム」にてコリジョンカプセル(ビューポートの赤枠)にキャラクターが合うよう数値を設定
サードパーソンキャラクター設定
サードパーソンキャラクター設定
カメラ設定

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

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

ファーストパーソンカメラの設定
ファーストパーソンカメラの設定
歩行スピード設定

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

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

MaxWalkSpeedの調整
MaxWalkSpeedの調整
コンパイル・保存

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

歩行モーションを作る

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

保存先フォルダを決める

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

コンテンツ

Characters

Mannequins

Animations

Manny

MM_Walk_Fwd

スケルトン選択

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

BlendSpace1D
BlendSpace1D
SK_Mannequin
SK_Mannequin
保存して開く

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

歩行スピード設定
MaximumAxisValue
MaximumAxisValue

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

モーション設定

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

モーション設定
モーション設定

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

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

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

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

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

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

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

アニメグラフ

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

  1. アセットブラウザから先ほど作成したブレンドスペース(ここではBodyBlendSpace1D)を選択し、アニメグラフにドラッグアンドドロップ、Output Poseノードと接続
  2. ブレンドスペース(BodyBlendSpace1D)のSpeedピンから「Promote to Variable」を選択
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ではファーストパーソンをベースに、サードパーソンプロジェクトをインポートして一部機能を使うことで、物理計算など難しいことを極力排除してファーストパーソン歩行時の揺れを実装することができます。

  • この記事を書いた人
  • 最新記事
クルエイチ

クルエイチ

NextClueLabの代表・管理者。 (Clue + 英知・叡智・叡知)でクルエイチ。 平日は会社員。 土日は副業でWeb・スマホアプリの開発やブロガーをこなす。 祝日は休み、UE5で3DCG動画制作などをして過ごす。

人気記事

Unreal Engine(UE)で、フリーフォントや購入したフォントを使ってみよう!とてもシンプルなテクニックですが、他のUE製作者と簡単に差をつけることができます! 1

フリーフォントや購入したフォントを使ってみよう!とてもシンプルなテクニックですが、他のUE製作者と簡単に差をつけることができます!

Windows用にパッケージ化するとエラーが出る場合があります。当記事の対処方法で解決する場合があるので参考にしてみてください。 2

Windows用にパッケージ化するとエラーが出る場合があります。当記事の対処方法で解決する場合があるので参考にしてみてください。

Unreal Engine(UE)で鏡のマテリアルを作ってみよう!壁や床、箱などにも設定可能で自由度の高い鏡マテリアルの作り方を、初心者向けに解説します! 3

鏡のマテリアルを作ってみよう!壁や床、箱などにも設定可能で自由度の高い鏡マテリアルの作り方を、初心者向けに解説します!

-キャラクター
-