【Unreal Engine】ゲームパッド対応:デッドゾーン・デバイス判別・UIをパッドで操作する

作成: 2026-07-23

キーボードで動くゲームをパッドでも遊べるようにする入門。既存のInput Actionにパッドのキーを足すだけの基本、スティックが勝手に歩くドリフトをDead Zoneモディファイアで直す方法、トリガーの扱い、今の操作デバイスを判別してボタン表示を切り替える方法、メニューを開いたらパッドにフォーカスを渡すところまで。キーボード専用ミニゲームをパッド両対応にします。

キーボードとマウスで動くところまでは作れた。でも、いざパッドを挿しても、キャラはピクリとも動きません。PCゲームでも、パッド対応は公開時のレビューで真っ先に指摘される項目で、Steamでの配信を考えるなら実質必須です。

とはいえ、ゼロから作り直す必要はありません。Enhanced Input で組んであれば、 既存の仕組みにパッドのキーを足すだけ で大半は動きます。この記事では、パッド固有の3つの論点、スティックのドリフト・操作デバイスの判別・UIをパッドで操作する、を、キーボード専用のミニゲームをパッド両対応にしながら解説します。

キーボードとゲームパッドの両方で同じキャラを操作できることを示すソフトブルーのクレイ人形

この記事でわかること

  • 既存のInput Actionに パッドのキーを足すだけ の基本
  • スティックが勝手に歩く ドリフトをDead Zoneで直す
  • トリガー の扱い(Axis扱いのボタン)
  • 今の操作デバイスを 判別 してボタン表示を切り替える
  • メニューを開いたら パッドにフォーカスを渡す
  • 実践: キーボード専用ミニゲームをパッド両対応にする

Sponsored

パッドのキーを足すだけ

Enhanced Inputで作ってあれば、パッド対応の第一歩はとても簡単です。 同じInput Actionに、パッドのキーを割り当てるだけ です。

Move用のInput Actionに、WASDキーとゲームパッドの左スティックの両方が割り当てられ、同じ行動を起こす図

たとえば「移動(Move)」の Input Mapping Context(IMC) に、これまでのWASDキーに加えて、 ゲームパッドの左スティック(Gamepad Left Thumbstick) を割り当てます。すると、キーボードでもパッドでも同じ IA_Move が発火し、ゲーム側のロジックは1つのままで両対応になります。

これがEnhanced Inputの強みです。行動(Input Action)と、それを起こすキー(IMC)を分けてあるので、 入力デバイスが増えても、キーを足すだけ で済みます。ジャンプやアクションも、同じ要領でパッドのボタン(Gamepad Face Button など)を足していきます。

スティックのドリフトをDead Zoneで直す

パッド対応で最初にぶつかるのが、 スティックのドリフト です。手を離しているのに、キャラがじりじりと勝手に歩き続ける。これは、スティックが完全な中央に戻りきらず、わずかな傾きを入力として送り続けるために起きます。

スティックの中央付近の微小な入力を、Dead Zoneモディファイアが切り捨てて0にする図。閾値の外側だけが有効な入力になる

直し方は、Move用のInput Actionに Dead Zone(デッドゾーン)モディファイア を追加することです。

  • Lower Threshold(下側のしきい値)0.2 程度に設定する
  • すると、スティックの傾きが0.2未満の入力は すべて0として扱われ 、切り捨てられます
  • 手を離したときの微小なドリフトは0.2を超えないので、キャラはきちんと止まります

デッドゾーンは、Input Action全体に付けることも、IMCのゲームパッド割り当て側に付けることもできます。 IMCのパッド割り当て側に付けると「これはパッド用の設定だ」と意図が明確 になり、キーボード入力に影響しません。スティックのモディファイアには、他にも入力の向きを整える Swizzle Input Axis Values(軸の入れ替え)や Negate(反転)がありますが、まず入れるべきはDead Zoneです。

トリガーの扱い

パッドの トリガー(L2 / R2、Gamepad Trigger) は、押し込み具合が0.0〜1.0で取れる、 Axis扱いのボタン です。ただのオン・オフではなく、どれだけ深く踏んだかが分かります。

  • オン・オフとして使う: レースの「ちょっとだけアクセル」を無視して、しきい値(例:0.5)を超えたらボタンが押されたとみなす
  • アナログとして使う: 踏み込み量をそのまま、アクセルの強さや弓の引き絞りに使う
トリガーの踏み込み量が0.3・0.9と数値で返ること、しきい値0.5を超えた分だけをオン扱いにできることを3つのメーターで並べた図

Enhanced Inputなら、トリガーもただのキー割り当てとして IA_Fire などに足せます。アナログ量が欲しいときは、Input ActionのValue Typeを Axis1D(float) にして、踏み込み量(0.0〜1.0)を受け取ります。

Sponsored

今のデバイスを判別する

「Eで調べる」という表示を、パッドを持っているときは「Xで調べる」に変えたい。そのためには、 今プレイヤーがキーボードとパッドのどちらで操作しているか を知る必要があります。

直近に押されたのがキーボードかパッドかを判別し、その結果でボタン表示のTextureを差し替える流れの図

ここは正直にお伝えします。 Enhanced Input単体には、直近の操作デバイスを知る綺麗な標準ノードがありません 。素朴には「最後に発火した入力がキーボード由来かパッド由来か」を自分で記録する手もありますが、抜けが多く安定しません。

確実なのは、 Common UI プラグインが提供する Common Input Subsystem です。

  • Get Current Input Type: 今の操作が Mouse & Keyboard / Gamepad / Touch のどれかを返す
  • On Input Method Changed: 操作デバイスが切り替わった瞬間に通知してくれる

この通知を受けて、ボタン表示のTexture(「E」の画像と「X」の画像)を差し替えれば、パッドを握った瞬間に表示が切り替わります。デバイス判別とボタン表示をしっかり作るなら、Common UIの導入が正攻法です(Common UIについては後述)。

UIにフォーカスを渡す

パッド対応でもう1つ忘れがちなのが、 メニューをパッドで操作できるようにする ことです。マウスならボタンを直接クリックできますが、パッドには「今どのボタンを選んでいるか(フォーカス)」の概念が要ります。

メニューを開いた瞬間に、最初のボタンへSet Keyboard Focusでフォーカスを渡し、そこから十字キーで移動できるようにする図

ポイントは、 メニューを開いた瞬間に、最初のボタンへフォーカスを与える ことです。これを忘れると、メニューは開くのに、十字キーを押しても何も選べない「カーソル迷子」の状態になります。

  • メニューを表示したイベントの中で、最初のボタン(例:「再開」)に対して Set Keyboard Focus を呼ぶ
  • これで、そのボタンが選択された状態でメニューが開き、十字キーで項目を移動できるようになります

ここで大事なのは、 この記事は「最初のフォーカスを与える」までに留める ことです。フォーカスがボタン間をどう移動するか(Navigation設定)、迷子になったときの対策といった詳細は、UIのフォーカス管理がまるごと扱っています。まずは「開いたら最初の1つにフォーカスを渡す」だけ押さえてください。

Sponsored

実践:ミニゲームをパッド両対応にする

Third Person系のアクション、見下ろしシューター、パズルのメニュー操作。 「キーボード専用だったゲームを、挿すだけでパッドでも遊べるようにする」 はどんなゲームでも通る道です。ここではその一周を、既存のIMCへの追加とDead Zone、そしてメニューのフォーカスで組みます。

作るのは、 パッドを挿してスティックで歩き、手を離せば(ドリフトがあっても)止まり、Startでメニューを開いて十字キーで選びAで決定できる ミニゲームです。

動かすとこうなります。パッドを挿してスティックを倒すと、キャラが歩き出す。スティックから手を離すと、多少のドリフトがあってもピタッと止まる。Startボタンを押すとポーズメニューが開き、 開いた瞬間に「再開」ボタンが選択されていて 、十字キーで「設定」「終了」へ移動でき、Aボタンで決定できます。

パッドで歩き、手を離すと止まり、Startでメニューが開いて再開ボタンにフォーカスが当たる一連の流れを示した実例図

再現条件

項目設定
IMC_Default(Input Mapping Context)IA_Move にキーボードのWASDに加えて Gamepad Left Thumbstick を割り当て
IA_Move のモディファイアDead Zone(Lower Threshold = 0.2 )を追加
ポーズメニュー WBP_PauseMenuポーズメニュー の資産を流用。「再開」ボタンを最初のフォーカス先に
メニューを開くキーIA_PauseGamepad Special Right(Start) を割り当て

ステップ1:IMCにパッドを足してDead Zoneを付ける

IMC_Default を開き、IA_Move の割り当てにGamepad Left Thumbstickを追加します。そのパッド割り当てのModifiersに Dead Zone を足し、Lower Thresholdを0.2にします。

IMC_Default
  IA_Move
    ├ W / A / S / D(キーボード)
    └ Gamepad Left Thumbstick(パッド)
         Modifiers: Dead Zone (Lower Threshold = 0.2)

ステップ2:メニューを開いたらフォーカスを渡す

IA_Pause が発火したら、ポーズメニューを表示し、その直後に「再開」ボタンへ Set Keyboard Focus を呼びます。

IA_Pause(Started)
  → Create Widget(WBP_PauseMenu)→ Add to Viewport
  → Set Game Paused(true)
  → Get「再開」ボタン → Set Keyboard Focus   // ここが要点

確かめる

パッドを挿してPlayしてください。うまくいけば、スティックで歩き、 手を離すとドリフトがあっても止まります 。Startを押すとメニューが開き、 十字キーで「再開/設定/終了」を移動でき、Aで決定 できます。

うまくいかないときの切り分けです。

  • 手を離しても歩き続けるIA_MoveDead Zoneが付いていません 。またはLower Thresholdが小さすぎます(0.2前後に)
  • メニューは開くが十字キーで選べないSet Keyboard Focus を呼んでいません。最初のボタンへフォーカスを渡す(前節)
  • スティックが逆や横向きに動く → 軸の向きが合っていません。Swizzle Input Axis ValuesNegate で軸を整える

ポイントは2つです。

  • 既存の資産にパッドを足す: 行動(IA)はそのまま、IMCにパッドのキーを足すだけ。Enhanced Inputで組んであれば、両対応は「作り直し」ではなく「追加」です
  • パッド固有の罠はDead Zoneとフォーカス: 歩き続けるならDead Zone、メニューが選べないならフォーカス。この2つが、キーボードには無いパッド対応の勘所です

おまけ:先に知っておくと良いこと

Common UIという選択肢。 ボタン表示の自動切り替え、複数デバイスの統一的な扱い、コンソール向けの堅牢なUIを本格的に作るなら、Epic製の Common UI プラグインが正攻法です。デバイス判別(Common Input Subsystem)だけでなく、ボタンアイコンの差し替えやフォーカスの扱いも整った仕組みで提供されます。小規模なうちは素朴な作りで十分ですが、「パッド・マウス・コンソールをきちんと両立させたい」と感じたら導入を検討してください。

パッド2台でのローカル協力プレイ。 パッドが2つあれば、画面分割のローカルマルチプレイで、1台のPCで2人プレイができます。プレイヤーごとにパッドを割り当てる仕組みは、そちらで扱っています。

キーコンフィグと組み合わせる。 パッドのボタン割り当ても、プレイヤーが変更できるようにしたいなら、キーバインドの変更の仕組みがそのまま使えます。パッド対応とキーコンフィグは、どちらもEnhanced Inputの上に乗る相性の良い機能です。

まとめ

キーボードのゲームをパッド対応にするのは、次の流れで進みます。

論点やること道具
動かす既存IAにパッドのキーを足すIMCにGamepadキーを追加
止めるドリフトを切り捨てるDead Zoneモディファイア(0.2)
判別する今のデバイスを知るCommon Input Subsystem(Common UI)
選ぶメニューにフォーカスを渡すSet Keyboard Focus(詳細はui記事へ)

そして貫く原則が、 Enhanced Inputなら「作り直し」でなく「追加」 ということです。行動とキーを分けてあるから、デバイスが増えても足すだけで済みます。

これで、あなたのゲームはパッドでも遊べるようになりました。手元のパッドを挿して、まずはスティックで一歩、歩かせてみてください。

さらに学ぶために