13.

UE5 の旧入力から Enhanced Input へ移行する手順

編集

この記事の要点

  • 旧 Input Mappings(Action Mappings / Axis Mappings)は非推奨扱いです。新規開発は Enhanced Input へ移行するのが前提になります。
  • Action Mapping は Digital の Input Action へ、Axis Mapping は Axis1D または Axis2D の Input Action へ移すのが基本方針です。
  • Axis Mapping の Scale による符号指定は Negate モディファイアに、前後左右の2軸は Axis2D 1つへの統合に置き換わります。
  • Pressed / Released の2つのイベントは、Pressed / Released トリガー、または Started / Completed ピンで表現します。
  • 一度に全部を書き換えず、機能単位で置き換えて動作確認する進め方が安全です。旧ノードの消し忘れによる二重発火に注意。

途中まで作ったプロジェクトや、古い解説を見ながら組んだ入力処理を Unreal Engine 5 (UE5) の Enhanced Input へ移す作業には、機械的に置き換えられる部分と、考え方から見直す必要がある部分が混在しています。この記事では、旧 Input Mappings が Enhanced Input のどこに対応するのかを整理したうえで、実際の手順と起きやすいトラブルの原因を扱います。

1なぜ移行するのか

旧来の入力システムは、Project Settings の Input カテゴリにある Action Mappings と Axis Mappings で設定するものでした。UE5 では Enhanced Input が標準となり、旧 Bindings のセクションには非推奨である旨の表示が出ます。当面は動作しますが、公式ドキュメントもテンプレートも新しい情報はすべて Enhanced Input 前提で書かれるため、旧方式のままでは参照できる資料が急速に減っていきます。

機能面の差も小さくありません。旧方式では自作コードが必要だった「長押し判定」「入力体系の切り替え」「入力値の加工」が、設定だけで実現できます。移行の手間はかかりますが、その後の追加実装は明確に軽くなります。

2対応関係を先に押さえる

移行作業のほとんどは、旧設定の各項目をどこに書き換えるかという単純作業です。まず対応表を頭に入れておくと迷わず進められます。

旧 Input Mappings Enhanced Input Action Mapping「Jump」 Space キー Axis Mapping「MoveForward」 W = 1.0 / S = -1.0 (Scale で符号を指定) Axis Mapping「MoveRight」 D = 1.0 / A = -1.0 (Scale で符号を指定) IA_Jump(Digital) Space キー+Pressed トリガー IA_Move(Axis2D) W:Swizzle / S:Negate+Swizzle A:Negate / D:そのまま 2つの軸が1つの Action に統合される
移行のイメージ。Action Mapping はほぼ1対1で移せますが、Axis Mapping は2本を1つの Axis2D にまとめる作り替えになります。
旧 Input MappingsEnhanced Input での書き換え先
Action MappingValue Type が Digital (bool) の Input Action
Axis Mapping(1軸のみ)Value Type が Axis1D (float) の Input Action
Axis Mapping 2本(前後+左右)Value Type が Axis2D (Vector2D) の Input Action 1つに統合
Scale に -1.0 を指定そのキーに Negate モディファイアを追加
Scale に 0.5 などの倍率を指定そのキーに Scalar モディファイアを追加
1つの Action への複数キー割り当て同じ Input Action に複数行のキーを追加(考え方は同じ)
InputAction イベントの Pressed 実行ピンPressed トリガー、または Started 実行ピン
InputAction イベントの Released 実行ピンReleased トリガー、または Completed 実行ピン
InputAxis イベントの Axis Value ピンInput Action イベントの値の出力ピン
設定は Project Settings に1セットだけInput Mapping Context を必要な数だけ作り、実行時に着脱

3移行の手順

いきなり全部を書き換えるのではなく、機能のまとまりごとに置き換えて都度動作確認するのが結果的に早道です。

  1. 現状の棚卸しをします。Project Settings の Input を開き、Action Mappings と Axis Mappings の一覧を書き出します。名前・キー・Scale をメモしておけば、そのまま移行後のチェックリストになります。
  2. Enhanced Input が使える状態か確認します。プラグインが有効か、既定クラス(Player Input Class / Input Component Class)が Enhanced Input 用かを確認します。古いプロジェクトでは旧クラスのままのことがあります。
  3. Input Action を作ります。棚卸しした一覧をもとに、対応表に従って Value Type を決めます。前後と左右の Axis Mapping は、この段階で1つの Axis2D にまとめる判断をします。
  4. Input Mapping Context を作ります。まずは IMC_Default のような1つのコンテキストに、旧設定と同じキー割り当てをすべて入れます。分割は後からでもできます。
  5. Modifier と Trigger を設定します。Scale の負値を Negate に、倍率を Scalar に置き換えます。Axis2D にまとめたキーには Swizzle Input Axis Values を追加します。
  6. Mapping Context を適用する処理を追加します。ブループリント (Blueprint) なら BeginPlay で Enhanced Input Local Player Subsystem を取得し、Add Mapping Context を呼びます。旧方式にはなかった工程で、忘れると全部が無反応になります。
  7. イベントノードを1つずつ差し替えます。InputAction / InputAxis ノードから伸びている処理を、新しいイベントノードにつなぎ替えます。1機能ずつ動作確認し、済んだら旧ノードを削除します。
  8. 旧設定を削除します。すべての差し替えが終わったら、Project Settings の Action Mappings / Axis Mappings を空にします。

4Axis Mapping の統合が最大の作り替えポイント

単純な置き換えでは済まないのがここです。旧方式では MoveForward と MoveRight という2つの Axis Mapping を作り、それぞれ独立した float として受け取っていました。そのまま Axis1D の Input Action を2つ作っても動きますが、Enhanced Input の利点をほとんど捨てることになります。

Axis2D 1つに統合すると、キーボードとゲームパッドのスティックを同じ Input Action に同居させられます。スティックは元から2軸の値を出すため、Modifier なしで割り当てるだけです。受け取り側は Vector2D を1回受け取るだけになり、2つに分かれていた処理を1か所にまとめられます。

統合時のキーごとの Modifier は次のとおりです。キーが生む値は既定で X 成分に入るため、前後方向は Swizzle Input Axis Values で Y 成分へ移す必要があります。

キー旧 Axis Mapping新しい Modifier(上から順に)
WMoveForward / Scale 1.0Swizzle Input Axis Values
SMoveForward / Scale -1.0Negate → Swizzle Input Axis Values
DMoveRight / Scale 1.0なし
AMoveRight / Scale -1.0Negate

Modifier は並べた順に上から適用されます。S のように2つ付ける場合は、順序が違うと結果が変わります。「効いているはずなのに方向がおかしい」ときは、まず並び順を疑ってください。

5Pressed / Released の置き換え

InputAction イベントノードには Pressed と Released の2つの実行ピンがありました。Enhanced Input のイベントノードにはこの名前のピンはなく、代わりに Started / Ongoing / Triggered / Completed / Canceled が並びます。対応のさせ方は2通りあり、どちらでも動きます。

○ トリガーで表現する
キー行に Pressed トリガーを追加すると、押した瞬間に1回だけ Triggered が発火します。Released トリガーなら離した瞬間に発火します。受け取り側のグラフが単純になります。
○ 実行ピンで表現する
トリガーを付けず、Started ピンを押した瞬間の処理に、Completed ピンを離したときの処理に使います。1つのノードで押下と解放の両方を扱えます。

どちらでもかまいませんが、プロジェクト内で方針を統一しておくと後から読みやすくなります。複数人で作業する場合、同じ意味の実装が2種類混在すると混乱のもとです。

6つまずきやすい点

症状ありがちな原因対処
移行後まったく入力が効かないAdd Mapping Context を呼んでいない旧方式には存在しなかった工程。Subsystem 経由での適用処理を追加する
1回のキー押下で処理が2回走る旧イベントノードが残っていて二重にバインドされている差し替え済みの旧ノードを確実に削除し、Project Settings の旧マッピングも消す
ジャンプが連射されるTrigger 未指定のまま Triggered ピンにつないでいるPressed トリガーを追加するか、Started ピンに変更する
移動方向が前後左右で入れ替わるSwizzle Input Axis Values の付け忘れ前後に使うキーへ Swizzle を追加する
後退や左移動が反対を向くNegate と Swizzle の順序が逆Negate を先、Swizzle を後にする
値が常にゼロで届くInput Action の Value Type と受け取り方が不一致Axis2D なら Vector2D として受け取るなど、型をそろえる
ノードは置けるのに一度も呼ばれないInput Component Class が旧クラスのままProject Settings の既定クラスを Enhanced Input 用に変更する
UI を出した後だけ効かない入力モードが UI 側に切り替わっている入力モードの設定を見直す。Enhanced Input とは別レイヤーの問題

最後の項目は移行作業と無関係に見えて、実際には移行のタイミングで表面化することがあります。ウィジェット (Widget) の表示前後で挙動が変わるなら、「Set Input Mode」の種類と使い方SetInputMode_UIOnlyを取り消す方法 を確認してください。メニューを閉じるキーが効かない場合は Blueprintで「Esc」キーを使ってイベントを発生させる方法 も参考になります。

7移行を機に設計を見直す

せっかく手を入れるので、旧設定をそのまま写すだけで終わらせず、Enhanced Input ならではの構成に整えておくと後が楽です。とくに効果が大きいのが Input Mapping Context の分割です。

○ こうする
「常時有効な基本操作」と「その場面だけの操作」でコンテキストを分けます。乗り物、会話、ポーズメニューなど、状態ごとにコンテキストを用意して着脱すれば、処理側の分岐がほとんど不要になります。
△ つまずきやすい点
コンテキストを分けたのに削除処理を書き忘れると、前の状態の入力が効き続けます。追加する処理を書いたら、その場で対になる削除処理も書いてしまうのが安全です。

Input Action の命名も見直しどきです。旧方式では MoveForward のようにキーの向きに近い名前を付けがちでしたが、IA_Move のようにゲーム内の意味で名付けたほうが、キー割り当てを変えたときのずれが起きません。あわせて Input フォルダにアセットをまとめるなど、置き場所のルールも決めておくとよいでしょう。

移行そのものは地味ですが、一度終えれば以後の入力まわりの追加実装は明らかに短く済みます。アニメーション関連の新しい仕組みを試すときにも足回りが整っている必要があるので、Motion Matchingの導入と必要なプラグイン のような機能に進む前に片付けておくことをおすすめします。

編集
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 へ移行する方法