WASDで歩き、Spaceでジャンプするキャラクターができました。次はキーボードから手を離して、ゲームパッドでも同じ場所を歩いてみましょう。
Enhanced Inputでは、移動やジャンプの処理を使い回しながら、パッドの割り当てを追加できます。ただ、キャラクターが動けば完成というわけではありません。手を離したときに止まるか、メニューを開いた後もパッドだけで遊び続けられるかで、操作のしやすさが変わります。
この記事では、左スティックで歩き、ボタンで跳び、メニューを選んでゲームへ戻るところまで作ります。入力方式に応じた表示を作るための、Common Inputの使い方も最後に試します。
この記事でわかること
- 同じInput Actionへ、パッドのスティックとボタンを追加する方法
- 小さな入力を無視するDead Zoneと、その調整の考え方
- トリガーの押し込み量と、入力が成立する条件の違い
- メニューの最初の選択先と、ゲームへ戻す処理
同じ移動とジャンプへ、パッドを追加する
Enhanced Inputの入門で作ったBP_InputPracticeを使います。WASDで動き、Spaceで跳べる練習用の白いキャラクターです。運転モードへ切り替えていたら、徒歩へ戻してから試してください。
ここでは、Windowsで認識されるXbox系のパッド1台を例にします。ボタンの文字や接続方法は機種で異なります。まずOS側でパッドを認識していることを確認し、UEのPlay画面をクリックして入力先をゲームにします。
IMCへ2つの行を追加する
Playを止め、IMC_PlayerControlsへ次の割り当てを加えます。既存のWASDとSpaceは残します。
| Input Action | 追加するキー | 受け取る値 |
|---|---|---|
| IA_PracticeMove | Gamepad Left Thumbstick 2D-Axis | 左右のXと前後のY |
| IA_PracticeJump | Gamepad Face Button Bottom | 押した・押していない |
2D-Axisは、スティックの左右と上下をまとめて読む入力です。「Gamepad Left Thumbstick」の押し込みボタンや、X軸だけの入力とは別なので、キーの選択欄で末尾まで確認します。
パッドの新しい2行は、最初はModifiersとTriggersを空にします。スティックは初めからXとYを持つので、W/S用のSwizzleやA/S用のNegateをそのままコピーする必要はありません。
キーコンフィグの記事も進めた場合は、追加するパッドのジャンプ行のSetting BehaviorをIgnore Settingsにします。今回はその行をキー変更の対象にせず、キーボード側のJumpKeyを1枠のままにするためです。Space側のOverride SettingsとNameは変えません。

まず、歩いて跳んでみる
保存してPlayし、左スティックを前後左右へ倒します。入力のXは左右、Yは前後です。Enhanced Input入門で作ったAdd Movement Inputが、そのままこの値を受け取ります。
パッドの下側のフェイスボタンを押すと、IA_PracticeJumpからJumpが呼ばれます。Xbox系ならAです。キーコンフィグでSpaceをJへ変えていても、パッドの追加行から同じジャンプを呼べます。
変えたのは操作の入口です。歩く処理と跳ぶ処理 は共通のまま、WASDとパッドの両方を使えるようになりました。
小さな入力をDead Zoneで整える
スティックは、手を離しても入力がぴったり0へ戻らないことがあります。その小さなずれが移動へ届くと、キャラクターがじりじり動きます。こうした、意図しない入力が残る状態をドリフトと呼びます。
Dead Zone(デッドゾーン)は、中央付近の小さな入力を0として扱う範囲です。「どれくらい倒したら動き始めるか」を調整するものと考えると、操作感との関係が分かりやすくなります。
1. 調整前の入力を見ておく
Play中にコンソールを開き、showdebug enhancedinput を実行します。コンソールは通常チルダキーで開きます。開けない配列では、「プロジェクト設定」→「Input」のConsole Keysへ、練習中に使っていないキーを設定できます。
表示されたIA_PracticeMoveの値を見ながら、スティックを倒し、中央へ戻します。キーボードには触れず、どの程度の入力が残るか確かめます。ここで見るのはUEへ届いた値で、パッド内部の生のセンサー値ではありません。
ドリフトが出ないパッドでも、少しだけ倒したときの反応を覚えておくと、設定後の違いを比べられます。
2. スティックの行へDead Zoneを加える
Playを止め、IMC_PlayerControlsのGamepad Left Thumbstick 2D-Axisの行にあるModifiersへDead Zoneを追加します。
| 項目 | 今回の値 | 意味 |
|---|---|---|
| Type | Radial | XとYを合わせた、中心からの距離で判定する |
| Lower Threshold | 0.2 | これより小さい入力を0として扱う |
| Upper Threshold | 1.0 | この大きさで出力が最大の1になる |
しきい値は、扱いを切り替える境目の数値です。Lowerは動き始める側、Upperは最大になる側の境目にあたります。Radialは円形に扱う方式で、XとYを別々に判定するAxialとは区別します。
IA全体へ付けると、同じIAを使うキーボードにも処理がかかります。今回はスティックの行へ付けることで、パッドだけを調整します。

3. 「止まる」と「少し動く」を両方確かめる
保存して再びPlayし、入力値と動きを比べます。たとえば入力の大きさが0.1なら、今回の設定後は0になります。一方、0.6の入力は0.5になります。0.2〜1.0の残った範囲を、出力の0〜1へ広げ直すためです。
Lowerを大きくするほど小さなずれを無視できますが、少しだけ倒して歩く操作もしにくくなります。0.2は調整の出発点です。手を離したときに止まり、意図した微操作もできる値を探します。
確認が終わったら、同じshowdebug enhancedinputをもう一度実行して表示を消します。入力が0なのに動き続ける場合は、Dead Zoneではなく、移動処理や外から加わる力などを調べます。
トリガーは、押し 込み量と成立条件を分ける
パッド背面のRT/LTなどは、どれくらい押したかを0〜1で読めるアナログトリガーです。軽く押すと小さい値、深く押すと1に近い値になります。
Enhanced InputにもTriggersという設定がありますが、こちらは「どんな入力なら操作を成立させるか」という条件です。パッドの部品としてのトリガーと、入力の成立条件は別のものです。

押し込み量を表示してみる
InputPracticeフォルダにIA_TriggerPracticeを作り、Value TypeをAxis1D (float)にします。IAのModifiersとTriggersは空にします。
IMC_PlayerControlsへIA_TriggerPracticeを追加し、キーはGamepad Right Trigger Axisを選びます。Axisの付かないボタン用の項目では、押し込み量を同じようには扱えません。
BP_InputPracticeへIA_TriggerPracticeのイベントを置きます。TriggeredからPrint Stringへ白い線をつなぎ、Action ValueをIn Stringへ接続してFloatからStringへの変換ノードを挟みます。Durationは0です。同じIA_TriggerPracticeイベントのCompletedからは、別のPrint Stringで0を2秒表示します。下の2図は、1つのイベントから出る配線を分けて示しています。
