キー入力に関しては、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 Possessed | Pawnがコントローラで所有されると呼び出し、そのコントローラを返す。 |
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 Once | Resetされるまで、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 Rotation | self(pawn)の向きを取得 |
Get Right Vector | 右方向のベクトル情報を取得 |
Get Forward Vector | 前方向のベクトル情報を取得 |
Add Movement Input | self(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 |
今回の追加後
ジャンプ/移動に関しては畳んでいます。
テスト動作してみるとわかると思いますが、NegateはYのみにする必要があります。
設定を出すには左のModifiesの▶からインデックス[0]の▶を押す。
プレイヤー(BP_test)の設定
Enhanced Action Events XXXX | XXXXは上で作成した入力アクション |
AddController Yaw Input | Z軸を回るような回転を与える |
Add Controller Pitch Input | Y軸を回るような回転を与える |
最後に
というわけで、今回はテンプレート(BP_ThirdPersonCharacter)で使われている、キー入力の再現を通じて、Enhanced Inputをどのように設定していくかを見てきました。
ほとんど分解しただけですが、理解度は上がったと思います。
入力アクション(IA_XXX)
個々のアクションの入力方式を設定(動作に応じて複数作成)
入力マッピングコンテキスト(IMC_XXX)
IA_XXXを登録して管理。基本的に1Pawn1つ設定
ブループリント(プレイヤー Pawn)のイベントグラフ
Enhanced Inputの初期設定(IMC_XXXと連携)と入力されたキーに応じた動作プログラム
ワールドセッティング
デフォルトのプレイヤーを設定(Default Pawn Class)
WASD移動を1から作れと言われたらかなり大変ですが、テンプレートの処理を流用できるのは有難いですね。
これからUE5を学んでいく方の助けになれば幸いです。
フルver.のMVがキテター
BGMにどうぞ
コメント
コメント一覧 (2件)
Enhanced Action ××のノードにAction valueX,Yが表示されません。
対処法はございますでしょうか。
「ノードの表示はされているがノードの中にAction valueXがない」
ということでいいでしょうか?
XYに関しては、X軸Y軸の入力形式なので入力アクション(IA_Moveとか)のValueTypeがAxis2Dになっているか確認してみて下さい。
デフォルトだとDigital(bool)になっていますが、これはOn/Offのみを検知する入力方式なので、XY軸に対応する場合は変更する必要があります。
もう一つ可能性としては、V(ノードの下の方の折り畳み)マークで閉じている部分に隠れてて見逃してる可能性もあります。
これらで対処できればいいのですが…