【Unreal Engine5】初めてのゲーム開発 <第5回>~キー入力の設定(EnhancedInput)

キー入力に関しては、Unreal Engine5.3.2(5.1以降?)ではEnhancedInputが正式採用され、Unreal Engine4以前のinput方式は非推奨(というか使えない)になりました。

というわけで、今回はキー入力の設定に関して、自分のような初心者でも設定できるように、できるだけ要点のみをまとめてみていきたいと思います。

使用しているバージョン

Unreal Engine 5.3.2

目次

仕組み

仕組みの理解のために、サードパーソンのテンプレートキャラクター(BP_ThirdPersonCharacter)がどのように設定されているかを見てみます。
イベントグラフを見ると、大きく4つに分かれています。

《初期設定》

《カメラの移動設定》

《プレイヤーの移動設定》

《プレイヤーのジャンプの設定》

今回の目的はこれらを自分で作り上げることが出来るようにすることで、設定等も行えるようになりたいと思います。

テスト用のプレイヤーキャラクターを作成

今回はキャラの作成の記事ではないので簡単に。

デフォルトのプレイヤーキャラを複製し、BP_testとします。

ウィンドウ > ワールドセッティング
Default Pawn Classを変更

BP_testのイベントグラフを全て消去します。

プレイしてみると、当たり前ですが操作不可。

今回はここがスタートライン。
元に戻すときはワールドセッティングのDefaut Pawn ClassをBP_ThirdPersonCharacterに

シンプルな仕組みで理解を深める(ジャンプのみ)

まずはシンプルに、スペースバーを押すとキャラがジャンプするようにします。
以下を適当なフォルダ(自分が分かる場所)に自分が分かるような名前で作成。

入力アクション

フォルダの適当な場所に右クリックメニューから入力アクションを作成

今回はIAt_jumpという名称にしました。

今回はシンプル構成なので、設定は手を加えなくてよい

ただし、例えばボタンの「Pressed」「Released」のトリガーを使いたい場合は上記のように設定する必要があります。

入力マッピングコンテキスト

適当な場所に入力マッピングコンテキストを作成

Mappingの右の+を押し、出てきた項目に先ほど作成した入力アクションを登録。

Noneと書かれてるところをクリックして、キーボード>スペースバーを設定。
最後にセーブ(左上のアセットを保存)

また、プルダウンで選ばずともアイコンが出てるところをクリック(黄色)してから対応させたいキーを押すとそれが選択されます

プレイヤー(BP_test)の設定

《初期設定》

Event PossessedPawnがコントローラで所有されると呼び出し、そのコントローラを返す。
Cast To PlayerController引き渡されたコントローラに対して続く処理を行う
Get EnhancedInputLocalPlayerSubsystem EnhancedInputを利用する際のおまじない
Add Mapping Contextマッピングコンテキストを登録する。
Mapping Contextに先ほど作成した入力マッピングコンテキストを設定して下さい。

Event Possessedの部分はテンプレートでは以下のようになっていました。

どちらでも良い気もしますが、(例えば歩行・車・飛行のような場面で)自アクターが変わった際の動作ではEvent Possessedになると思いますので、コーディングの整合性の観点だと、どちらでもいいのであればEvent Possessedを使いたい気がします。

《アクション設定(ジャンプ)》

Enhanced Action Events XXXX検索ではEnhanced Action Eventsで。
XXXXは入力アクションとして作成したものを選択可能。
入力アクション(XXXX)の信号を受け取る。
アコーディオンを広げると、他条件の確認も可能。
Do OnceResetされるまで、1回だけ次のノードが進行する。
Jumpジャンプ制御(C++でコーディングされている)

ここまで作成して実行してみると、スペースバーでジャンプは可能になります。

WASD移動・キーパッド操作を追加

基礎的な仕組みは分かったので、普通に動かせるレベルを目指します。

入力アクション

移動用の入力アクション(IAt_move)を新規作成します。
Value TypeをAxis2Dに変更。
Axis2Dは平面上の移動方式であり、例えば右+上で右上のような複合的な移動方式に対応する(多分)。

入力マッピングコンテキスト

入力マッピングコンテキストは1アクタ1個が基本なので、上でジャンプ操作の時に作成したものに追記していきます。
これがねぇ、よくわからないんです。
とはいえ、テンプレートプロジェクトのものをそのまま流用すれば動かすことは可能なので、以下のように設定して下さい。

Wキー
Modifies インデックス[0]

Swizzle Input Axis Values
Aキー
Modifies インデックス[0]

Negate
Sキー
Modifies インデックス[0]
Modifies インデックス[1]

Swizzle Input Axis Values
Negate
Dキー
設定なし
変更なし
上キー
Modifies インデックス[0]

Swizzle Input Axis Values
左キー
Modifies インデックス[0]

Negate
下キー
Modifies インデックス[0]
Modifies インデックス[1]

Swizzle Input Axis Values
Negate
右キー 
設定なし
変更なし
ゲームパッドの左サムスティックの2D軸
Modifies インデックス[0]
Modifies インデックス[1]

Dead Zone
Scalar

画像にするとこのようになります。

公式のEnhanced Input プラグインの概要をみても

これなので、「こういうもん」と覚えておいた方がいいかもしれません。

プレイヤー(BP_test)の設定

真面目にやると大変なので、テンプレートの移動方法を流用するのがいいと思います。

Enhanced Action Events XXXXジャンプの時と同じ。
コピペしたい場合でも、この関数だけはきちんと変更すること
私の場合は入力アクションがIAt_moveだったので
Enhanced Action Events IAt_move
Get Control Rotationself(pawn)の向きを取得
Get Right Vector右方向のベクトル情報を取得
Get Forward Vector前方向のベクトル情報を取得
Add Movement Inputself(pawn)を移動させる

2つのキー入力で2回移動(Add Movement Input)を行っています。
これはおそらくAxis2Dで平面的な移動入力を受け取って、それを上手く対処しているのだと思います(適当)。

以上で、WASD+ジャンプが実装できていると思いますのでテストで動かしてみて下さい。
これだけできれば、同じ要領で他の入力キーの設定もできるはず。


ちなみにコントローラに関しては(Xboxコントローラのような)Xinput方式のみ対応。
(PSコントローラのような)Directinput方式には非対応。

さらに余談ですが、Steamを起動していると、デフォルトでXboxコントローラが(Aボタン=Enterのように)キーボードに割り振られます(設定によるかも)。
この状態だと、きちんとキーアサインが出来ない可能性があるのでUnreal Engineで作業する時はSteamは落としておく方が無難です。

カメラ操作を追加

カメラ操作に関しても、テンプレートのものを流用します。

アクション設定

Value TypeをAxis2Dに変更。

入力マッピングコンテキスト

マウスのXY 2D軸
Modifies インデックス[0]

Negate ※Yのみ
ゲームパッドの右サムスティックの2D軸
Modifies インデックス[0]

Dead Zone
※マウス操作だけなら1つ目のみ設定

今回の追加後

ジャンプ/移動に関しては畳んでいます。
テスト動作してみるとわかると思いますが、NegateはYのみにする必要があります。
設定を出すには左のModifiesの▶からインデックス[0]の▶を押す。

プレイヤー(BP_test)の設定

Enhanced Action Events XXXXXXXXは上で作成した入力アクション
AddController Yaw InputZ軸を回るような回転を与える
Add Controller Pitch InputY軸を回るような回転を与える

最後に

というわけで、今回はテンプレート(BP_ThirdPersonCharacter)で使われている、キー入力の再現を通じて、Enhanced Inputをどのように設定していくかを見てきました。

ほとんど分解しただけですが、理解度は上がったと思います。

ポイント

入力アクション(IA_XXX)
個々のアクションの入力方式を設定(動作に応じて複数作成)
入力マッピングコンテキスト(IMC_XXX)
IA_XXXを登録して管理。基本的に1Pawn1つ設定
ブループリント(プレイヤー Pawn)のイベントグラフ
Enhanced Inputの初期設定(IMC_XXXと連携)と入力されたキーに応じた動作プログラム
ワールドセッティング
デフォルトのプレイヤーを設定(Default Pawn Class)


WASD移動を1から作れと言われたらかなり大変ですが、テンプレートの処理を流用できるのは有難いですね。

これからUE5を学んでいく方の助けになれば幸いです。

ヨルシカ「晴る」×「葬送のフリーレン」SPECIAL MUSIC VIDEO/フリーレンOPテーマアニメMV

フルver.のMVがキテター
BGMにどうぞ

コメント

コメント一覧 (2件)

  • Enhanced Action ××のノードにAction valueX,Yが表示されません。
    対処法はございますでしょうか。

    • 「ノードの表示はされているがノードの中にAction valueXがない」
      ということでいいでしょうか?

      XYに関しては、X軸Y軸の入力形式なので入力アクション(IA_Moveとか)のValueTypeがAxis2Dになっているか確認してみて下さい。
      デフォルトだとDigital(bool)になっていますが、これはOn/Offのみを検知する入力方式なので、XY軸に対応する場合は変更する必要があります。

      もう一つ可能性としては、V(ノードの下の方の折り畳み)マークで閉じている部分に隠れてて見逃してる可能性もあります。

      これらで対処できればいいのですが…

コメントする

目次