11.

UE5 の Enhanced Input 入門|IAとIMCの基本

編集

この記事の要点

  • Enhanced Input は Unreal Engine 5 の標準的な入力システムで、キーと処理を直接つながずアセットを介して仲介する仕組みです。
  • 中心となるのは「Input Action(何が起きたか)」と「Input Mapping Context(どのキーで起こすか)」の2つのアセットです。
  • Input Mapping Context は実行中に追加・削除でき、優先度を持たせて重ね掛けできます。状態ごとの入力切り替えが簡単になります。
  • Modifier(入力値の加工)と Trigger(発火条件)を組み合わせることで、長押し・タップ・反転・デッドゾーンなどをコードを書かずに設定できます。
  • 旧来の Action Mappings / Axis Mappings と比べ、値の型が明示され、押しっぱなし判定や軸の合成が仕組みとして用意されています。

Unreal Engine 5 (UE5) でキャラクターを動かそうとして、「解説どおりに Project Settings の Axis Mappings を設定したのに、テンプレートでは別の仕組みが使われていて話がかみ合わない」と戸惑った経験はないでしょうか。その正体が Enhanced Input です。この記事では、Enhanced Input が何を解決する仕組みなのか、中核となる Input Action と Input Mapping Context がそれぞれ何を担当しているのかを整理します。

1Enhanced Input とは何か

Enhanced Input は、Unreal Engine 5 で標準的に使われる入力システムです。プラグインとして同梱されており、UE5 のテンプレートから作成したプロジェクトでは最初から有効になっています。旧来の入力システム(Project Settings 内の Action Mappings / Axis Mappings)も残されていますが公式には非推奨で、新規プロジェクトは Enhanced Input が前提です。

従来の入力設定の困りごとは、「キーと処理が一対一で固く結びついてしまう」ことでした。「Fキーでドアを開ける」と設定した後で、乗り物に乗っている間だけ F の意味を変えたい、UI を開いている間は無効にしたい、といった要求が出ると、処理側に分岐を書き足すことになります。Enhanced Input はここにアセットによる仲介層を挟み、キーと処理を疎結合にします。

もうひとつの利点が、入力値の加工を設定側で完結できることです。「スティックの中央付近は無視したい」「符号を反転したい」といった調整を Modifier として宣言的に指定できるため、ブループリント (Blueprint) 側のグラフがすっきりします。

2登場人物は3つだけ

押さえるべき登場人物は次の3つです。この関係さえ頭に入れば、後の設定項目はすべて「どこに属する話か」で整理できます。

物理的なキー W / A / S / D ゲームパッドの スティック・ボタン Input Mapping Context どのキーをどの Action に W → IA_Move(加工あり) Space → IA_Jump 優先度つきで実行中に着脱可能 Input Action 「移動」「ジャンプ」 という抽象的な意味 値の型を持つ ブループリント/C++ のイベント Enhanced Input Local Player Subsystem Mapping Context をプレイヤーに適用する窓口
Enhanced Input のデータの流れ。処理側が知っているのは Input Action だけで、実際のキーは Mapping Context の差し替えで自由に変えられます。
要素正体担当する役割
Input Action(IA)アセット「ジャンプ」「移動」といった入力の意味そのもの。値の型(真偽値か軸か)を定義する。処理側はこれだけを見る
Input Mapping Context(IMC)アセットどの物理キーをどの Input Action に割り当てるかの一覧表。キーごとに加工と発火条件も設定できる
Enhanced Input Local Player Subsystem実行時のオブジェクトInput Mapping Context をローカルプレイヤーへ追加・削除する窓口。優先度もここで指定する

3Input Action は「意味」と「値の型」を決める

Input Action はコンテンツブラウザに作るアセットで、中身はシンプルです。もっとも重要な設定が Value Type、この入力がどんな型の値を運ぶかという指定です。ここを間違えると、受け取り側で値が常にゼロになったり、期待した軸に値が入ってこなかったりします。

Value Type運ばれる値向いている用途
Digital (bool)真偽値ジャンプ、決定、しゃがみなど、押されたかどうかだけが問題になる入力
Axis1D (float)単精度の数値トリガーの踏み込み量、ズーム、前後だけの移動といった1軸の入力
Axis2D (Vector2D)2成分のベクトルスティックによる移動、マウスによる視点操作。WASD の4キーもここに合成できる
Axis3D (Vector)3成分のベクトル3軸を同時に扱う特殊な入力デバイスなど

命名は IA_Jump IA_Move のように接頭辞をそろえるのが一般的です。Input Action 自体にも Modifier と Trigger を持たせられ、その場合は「割り当てられた全キーに共通して効く設定」になります。特定のキーだけに効かせたい設定は Input Mapping Context 側に書きます。

4Input Mapping Context は「割り当て表」

Input Mapping Context も同じくアセットで、こちらは Input Action と物理キーの対応表です。1つの Input Action に複数のキーを割り当てられますし、同じキーを別々のコンテキストで別の Action に割り当てることもできます。

設計上いちばん効いてくるのが、この Mapping Context を実行中に着脱できる点です。徒歩用・車両用・メニュー用のコンテキストを作っておき、状況に応じて追加・削除するだけで入力体系ごと切り替えられます。

追加時には優先度(Priority)を数値で指定します。複数のコンテキストが同じキーを取り合った場合、優先度の高いコンテキストの割り当てが勝ちます。たとえば通常操作を優先度0で常時適用しておき、乗り物に乗ったときだけ優先度1のコンテキストを重ねる、といった運用ができます。

5Modifier:入力値を届く前に加工する

Modifier は、キーが生み出した生の値を Input Action に届ける前に変換する部品です。Input Mapping Context の各キー行、または Input Action 本体に、上から順に並べて適用します。並び順が結果を変える点は覚えておいてください。順序を入れ替えると符号や軸の割り当てが変わり、意図しない挙動になります。

代表的な Modifierやること典型的な使いどころ
Negate値の符号を反転するSキーを後退にする、マウスのY軸を反転する
Swizzle Input Axis ValuesX・Y・Z の成分を入れ替えるキーの値は既定でX成分に入るため、前後移動をY成分へ移すときに使う
Dead Zone中央付近の微小な値を切り捨てるアナログスティックの遊びによる勝手な移動を止める
Scalar値に係数を掛ける感度調整、軸ごとの倍率調整
Smooth値の変化をならす入力のがたつきを抑えたいとき

もっとも混乱しやすいのが Swizzle Input Axis Values です。キーが生む値は既定で X 成分に入るため、W と S をそのまま Axis2D の Input Action に割り当てても、前後ではなく左右の成分として届いてしまいます。前後方向のキーには Swizzle を、逆向きのキーには Negate を、と組み合わせるのが定石です。

6Trigger:いつ発火させるかを決める

Trigger は「加工後の値がどうなったらアクションを発火させるか」を決める部品です。Modifier と同じく Input Mapping Context のキー行、または Input Action 本体に設定します。何も設定しない場合は、入力が有効な値を持っている間ずっと発火し続ける挙動になります。つまりキーを押しっぱなしにすると毎フレーム発火するということです。

代表的な Trigger発火の条件
Down入力が有効な値を持っている間、継続して発火する
Pressed押された瞬間の1回だけ発火する
Released離された瞬間に発火する
Hold指定した時間押し続けたときに発火する
Tap短く押して離したときに発火する
Pulse押している間、一定間隔で繰り返し発火する
Chorded Action別の Input Action が有効な間だけ発火する(同時押しの表現)

ここが旧来の入力設定との大きな違いです。「長押しで拾う」といった仕様を、以前はタイマーやカウンタを自作して実現していましたが、Enhanced Input では Trigger を選ぶだけで済みます。

7受け取り側に届く5つのイベント

ブループリントで Input Action のイベントノードを置くと、実行ピンが複数並びます。これが Trigger の状態遷移に対応した通知です。単純なキーなら Triggered だけで足りますが、Hold のような時間のかかる Trigger では他のピンが意味を持ちます。

イベント意味
StartedTrigger の評価が始まった。Hold なら押し始めた瞬間
Ongoing評価は続いているが、まだ条件を満たしていない。Hold なら押し続けている最中
Triggered条件が成立して発火した。実際の処理を書く場所
CompletedTrigger の評価が終了した
Canceled条件を満たさないまま中断された。Hold の途中で離した場合など

イベントノードには実行ピンのほかに、値の出力ピンもあります。Value Type が Digital なら真偽値、Axis2D なら Vector2D として取り出せます。Value Type と受け取り方が食い違うと値が常にゼロに見えるので注意してください。

8旧 Input Mappings との違いを整理する

観点旧 Input MappingsEnhanced Input
設定の置き場所Project Settings 内の一覧(プロジェクト全体で1つ)コンテンツブラウザのアセット(いくつでも作れる)
入力の種類Action(押下)と Axis(軸)が別建てInput Action に統合し、Value Type で区別する
実行中の切り替え実質できない。処理側で分岐するMapping Context の追加・削除で丸ごと切り替え
値の加工Scale の指定程度。あとは受け取り側で自作Modifier を積み重ねて宣言的に指定
長押し・タップ自前でタイマー処理を書くTrigger を選ぶだけ
優先度の概念なしMapping Context ごとに優先度を持つ

9最初につまずきやすいところ

○ こうする
Input Action は「移動」「攻撃」のようにゲーム内の意味で名前を付けます。キー名を含めた IA_KeyF のような命名は、後でキー割り当てを変えたときに名前だけ取り残されて混乱のもとになります。
△ つまずきやすい点
アセットを作っただけでは何も起きません。Input Mapping Context を Subsystem 経由でプレイヤーに追加する処理を書き忘れると、イベントノードは一切呼ばれず「作ったのに反応しない」状態になります。
○ こうする
状態ごとにコンテキストを分けます。「常時有効な基本操作」を優先度の低いコンテキストに、「その場面だけの操作」を高い優先度のコンテキストに置くと、着脱だけで入力体系が切り替わります。
△ つまずきやすい点
Trigger を指定しないと押しっぱなしで毎フレーム発火します。1回だけ実行したい処理を Triggered ピンにつなぐと連射されるため、Pressed トリガーを使うか Started ピンを使ってください。

10UI と入力の関係にも注意する

Enhanced Input を正しく設定しても、ウィジェット (Widget) を画面に出した後だけ入力が効かなくなる、というトラブルはよく起こります。これは Enhanced Input の問題ではなく、プレイヤーの入力モードがどこに向いているかという別レイヤーの話です。入力モードの扱いについては 「Set Input Mode」の種類と使い方SetInputMode_UIOnlyを取り消す方法 が参考になります。ポーズメニューを閉じるキーで悩んだ場合は Blueprintで「Esc」キーを使ってイベントを発生させる方法 も併せて確認してください。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. ブループリントで途中から親クラスを指定する方法
  2. C++で編集となっているコンポーネントをブループリントで編集する方法
  3. Boolean変数の初期値を変更する方法
  4. ブループリントで特定のキーが押された時にイベントを発火させる方法
  5. ブループリントで配列からインデックスを指定して取得する方法
  6. Blueprintで「Esc」キーを使ってイベントを発生させる方法
  7. Blueprintで「Cast To」を使い、複数のクラスに対応する方法
  8. Blueprintで指定した確率で処理を分岐させる方法
  9. FrameGrabberをBlueprintで使用する方法
  10. ブループリントで現在日時を取得する方法
  11. Enhanced Input とは?Input Action と Input Mapping Context の基本
  12. Enhanced Input でキー入力を受け取る手順
  13. 旧 Input Mappings から Enhanced Input へ移行する方法