【Unreal Engine】Enhanced Input System入門:Input ActionとMapping Contextの設定

作成: 2025-12-12

UE5で標準となったEnhanced Input Systemの基本的な使い方を紹介。Input ActionとInput Mapping Contextの役割、TriggersやModifiersによる入力カスタマイズ、シーンに応じたコンテキスト切り替えなどを整理。

Enhanced Input Systemが必要な理由

Unreal Engine 4(UE4)まで使用されていた従来の入力システム(Action MappingとAxis Mapping)は、シンプルなゲームでは十分機能しましたが、プロジェクトが大規模化し、入力の種類や対応デバイスが増えるにつれて、いくつかの課題が顕在化していました。

従来の入力システムの主な課題:

  1. 管理の煩雑さ: すべての入力設定がプロジェクト設定ファイルに一元化されていたため、特定の入力(例: 「ジャンプ」)がどのキーに割り当てられているかを確認するために、設定全体を検索する必要がありました。
  2. コンテキストの切り替えの困難さ: プレイヤーが「歩行モード」から「運転モード」に切り替わった際など、状況に応じて入力設定を動的に変更するのが手間でした。コード内で手動で入力バインディングを解除・再設定する必要があり、バグの原因になりがちでした。
  3. 柔軟性の欠如: 長押し、ダブルタップ、同時押しといった複雑な入力条件を実装するには、BlueprintやC++で複雑なロジックを組む必要がありました。

Unreal Engine 5(UE5)で導入されたEnhanced Input System は、これらの課題を解決するために設計された、より柔軟で強力な入力管理フレームワークです。


Enhanced Input Systemの主要コンポーネント

Enhanced Input Systemは、主に以下の3つのアセットと1つのコンポーネントで構成されています。

コンポーネント名役割従来のシステムとの対応
Input Action (IA)プレイヤーが実行したい抽象的なアクション を定義します(例: ジャンプ、移動、攻撃)。入力デバイスに依存しません。Action Mapping / Axis Mapping
Input Mapping Context (IMC)どの入力デバイス (キーボードのSpaceキー、ゲームパッドのAボタンなど)を、どのInput Action に割り当てるかを定義します。Project SettingsのInputセクション
Input Trigger & Modifier入力アクションの発動条件(長押し、ダブルタップなど)や、入力値の加工(デッドゾーン、軸の反転など)を定義します。従来のシステムには存在しない機能
Enhanced Input ComponentプレイヤーキャラクターなどのPawnにアタッチし、IMCを適用し、IAのイベントを受け取るためのコンポーネントです。従来のInput Component

重要なポイント: IAは「何をしたいか」、IMCは「どうやってそれを実現するか」を分離して管理します。これにより、入力設定の管理が劇的に容易になります。


Enhanced Input Systemの実装手順

ここでは、キャラクターを移動させるための基本的な設定をBlueprintで実装する手順を解説します。

Step 1: Input Action (IA)の作成

移動に必要な2つのIAを作成します。

  1. コンテンツブラウザで右クリックし、Input -> Input Actionを選択します。
  2. 移動方向の入力を受け取るための IA_Move を作成します。
    • Value TypeAxis2D (Vector2) に設定します。これは、X軸(左右)とY軸(前後)の2方向の入力を受け取るためです。
  3. ジャンプのための IA_Jump を作成します。
    • Value TypeDigital (Bool) に設定します。

Step 2: Input Mapping Context (IMC)の作成

次に、作成したIAに実際のキーを割り当てます。

  1. コンテンツブラウザで右クリックし、Input -> Input Mapping Contextを選択し、IMC_PlayerControlsを作成します。
  2. IMC_PlayerControlsを開き、+ Mappingでマッピングを追加します。
Input ActionKey / ButtonModifiers
IA_MoveW (Keyboard)Swizzle Input Axis (YXZ)
IA_MoveS (Keyboard)Negate
IA_MoveD (Keyboard)Swizzle Input Axis (YXZ)
IA_MoveA (Keyboard)Negate + Swizzle Input Axis (YXZ)
IA_JumpSpace Bar (Keyboard)なし

💡 Modifiersの解説:

  • IA_MoveはVector2を期待していますが、キーボードのW/S/A/Dは単一の軸(Float)しか出力しません。
  • W/SはY軸(前後)に、A/DはX軸(左右)にマッピングする必要があります。
  • Swizzle Input Axis Modifiersを使用することで、W/Sの入力をY軸に、A/Dの入力をX軸に変換できます。
  • Negate Modifiersは、Sキー(後退)やAキー(左移動)のように、入力値を反転させるために使用します。

Step 4: プレイヤーキャラクターへのIMCの適用

プレイヤーキャラクターのBlueprint(例: BP_ThirdPersonCharacter)を開き、Event BeginPlayでIMCを適用します。

// BP_ThirdPersonCharacter (Event Graph)

// 1. Get Player Controller
// 2. Get Subsystem ノードで EnhancedInputLocalPlayerSubsystem を選択
// 3. Add Mapping Context (Target: Subsystem, Context: IMC_PlayerControls, Priority: 0)

💡 Enhanced Input Subsystemの取得方法

Enhanced Input SubsystemはLocal Player Subsystemの一種です。「Cast to Enhanced Input Player Controller」というノードは存在しません。代わりに、Get Subsystemノード を使用し、サブシステムクラスとしてEnhancedInputLocalPlayerSubsystemを指定してください。Player Controllerを取得した後、Get Subsystemノードを接続することで、そのプレイヤーに関連付けられたSubsystemインスタンスを取得できます。

Step 5: Input Actionイベントの処理

最後に、IAイベントを処理してキャラクターを動かします。

// BP_ThirdPersonCharacter (Event Graph)

// IA_Moveイベントの処理
// 1. Enhanced Input Action Eventsで IA_Move を検索
// 2. Triggeredピンから Add Movement Input ノードを呼び出す
// 3. Action Value (Vector2) を Break Vector 2D で分解
// 4. X軸の値を Get Right Vector に、Y軸の値を Get Forward Vector に接続し、それぞれ Add Movement Input の World Direction に接続
// 5. Add Movement Input の Scale Value に X軸/Y軸の値を接続

// IA_Jumpイベントの処理
// 1. Enhanced Input Action Eventsで IA_Jump を検索
// 2. Triggeredピンから Jump ノードを呼び出す
// 3. Completedピンから Stop Jumping ノードを呼び出す

TriggersとModifiers

Enhanced Inputの真価は、Triggers(発動条件)とModifiers(入力値の加工)にあります。これらを組み合わせることで、複雑な入力ロジックをBlueprintやC++で組むことなく、アセット側で定義できます。

Input Triggers(発動条件)の例

Trigger説明使用例
Held一定時間以上キーが押され続けた場合に発動します。スキルのチャージ、長押しによるメニュー表示。
Tapキーが素早く押されて離された場合に発動します。ダブルタップによるダッシュ、素早いアクション。
Chord複数のキーが同時に押された場合に発動します。L1+R1のような同時押しコマンド。
Downキーが押された瞬間に発動します(従来のAction Mappingに近い)。通常の攻撃、ジャンプ。

Input Modifiers(入力値の加工)の例

Modifier説明使用例
Dead Zoneスティックの遊び(デッドゾーン)を設定し、意図しない入力を無視します。ゲームパッドのスティック操作。
Negate入力値を反転させます(例: 1.0を-1.0に)。後退操作、視点操作のY軸反転。
Swizzle Input Axis入力ベクトルの軸を入れ替えます(例: XとYを入れ替える)。キーボードのW/S/A/D入力をVector2にマッピングする際。
Smooth入力値に滑らかさを加え、急激な入力変化を緩和します。視点操作の加速・減速。

ベストプラクティスとよくある間違い

✅ ベストプラクティス:コンテキストの活用

Enhanced Inputの最大の利点は、IMCを動的に切り替えられることです。

  • IMCの分割:IMC_PlayerControls(基本操作)」「IMC_Driving(運転操作)」「IMC_UI(メニュー操作)」のように、ゲームのコンテキスト ごとにIMCを分割します。
  • 優先度 (Priority) の設定: 複数のIMCが同時に有効になる場合(例: 運転中にUIも操作できる場合)、Add Mapping Contextノードで優先度を設定し、競合を防ぎます。優先度の高いIMCのマッピングが優先されます。

❌ よくある間違い:Input ActionのValue Typeの誤設定

IAを作成する際、Value Typeを適切に設定しないと、意図した入力値を取得できません。

  • Digital (Bool): ジャンプ、攻撃など、ON/OFFの二値入力(キーボードのキー、ボタン)。
  • Axis1D (Float): スロットル、トリガーなど、単一軸の連続値入力。
  • Axis2D (Vector2): 移動、視点操作など、2軸の連続値入力。

キーボードのWキーをAxis2DのIAに割り当てた場合、WキーはFloat値(1.0)を出力します。これをVector2のY軸にマッピングするには、前述の通りSwizzle Input Axis Modifierが必須になります。このModifierを忘れると、入力が機能しない原因となります。

Enhanced Input System活用のポイント

Unreal Engine 5のEnhanced Input Systemは、従来の入力システムが抱えていた管理の煩雑さや柔軟性の欠如といった問題を根本的に解決する強力なフレームワークです。

  • Input Action (IA) で「何をしたいか」を抽象化し、Input Mapping Context (IMC) で「どう実現するか」を分離。
  • TriggersModifiers を活用することで、複雑な入力ロジックをアセット側で簡単に定義可能。
  • IMCを動的に切り替えることで、ゲームのコンテキストに応じた入力管理を容易に実現。

UE5でのゲーム開発においては、Enhanced Input Systemをマスターすることが、快適でメンテナンス性の高い入力システムを構築するための鍵となります。ぜひ、あなたのプロジェクトで活用してみてください。