ほげたつブログ

プログラムとアニメーションをかじって生きてる

UE4でデバッグする時に自動的にEscapeキーやPauseキーがバインドされる件への対応方法

C89は残念ながら抽選漏れしました。
まぁこればっかりは仕方ないですね。

まだ応募は開始されてませんが、1月にデジゲー博があるようです。
デジゲー博SPECIAL in 闘会議2016 | デジゲー博
せっかく作っているので、こちらに応募しようかなと考えています。
(締め切りが一ヶ月延びたー!ヤッター!)


今回は小ネタです。

UE4にはデバッグ用に自動でバインドされるキーが存在する

例えばポーズ画面を実装する際に、一般的にはEscapeキーやPauseキーに割り当てるかと思います。
しかしUE4では DebugExecBindings というデバッグ時(Shipping以外)でのみバインディングされるキーが存在します。
それらのリストは以下のファイルに記述があります。

\Engine\Config\BaseInput.ini

[/Script/Engine.PlayerInput]

; --- General bindings
+DebugExecBindings=(Key=Pause,Command="Pause")
+DebugExecBindings=(Key=F11,Command="LevelEditor.ToggleImmersive")
+DebugExecBindings=(Key=F11,Command="MainFrame.ToggleFullscreen",Shift=True)
+DebugExecBindings=(Key=F1,Command="ShowMouseCursor",Shift=True)
+DebugExecBindings=(Key=F1,Command="viewmode wireframe", bIgnoreShift=True)
+DebugExecBindings=(Key=F2,Command="viewmode unlit")
+DebugExecBindings=(Key=F3,Command="viewmode lit")
+DebugExecBindings=(Key=F4,Command="viewmode detaillighting")
+DebugExecBindings=(Key=F5,Command="viewmode shadercomplexity")
+DebugExecBindings=(Key=F9,Command="shot showui")
+DebugExecBindings=(Key=Period,Command="RECOMPILESHADERS CHANGED",Control=True,Shift=True)
+DebugExecBindings=(Key=Comma,Command="PROFILEGPU",Control=True,Shift=True)
+DebugExecBindings=(Key=Escape,Command="CloseEditorViewport")
+DebugExecBindings=(Key=Tab,Command="FocusNextPIEWindow",Control=True)
+DebugExecBindings=(Key=Tab,Command="FocusLastPIEWindow",Control=True,Shift=True)
+DebugExecBindings=(Key=Apostrophe,Command="EnableGDT")

ご覧の通り、PauseキーにはPauseイベントが、EscapeキーにはCloseEditorViewportがバインドされていますね。
そのため例えゲーム側でInputActionに定義したとしても、DebugExecBindingsが優先されてしまいます。
つまりゲーム定義イベントの実行確認ができないということです。

対応方法

ゲーム側のコンフィグで設定を上書きしてあげることで無効化することができます。

[プロジェクト名]\Config\DefaultInput.ini

[/Script/Engine.PlayerInput]

-DebugExecBindings=(Key=Escape,Command="CloseEditorViewport")
-DebugExecBindings=(Key=Pause,Command="Pause")

これらを該当ファイルの最後に追記して下さい。
先頭に「-」を付けることで設定を削除になります。
設定が上手く反映されないという方は、編集後に一度エディタを再起動してみてください。

ちなみに別のキーに割り当てたいという場合でもこちらに記述すれば反映されます。
例えば Shift+Escape で再生終了にしたい場合は上記で打ち消したあとで、

+DebugExecBindings=(Key=Escape,Command="CloseEditorViewport",Shift=True)

みたいにすると良いです。

自分のやり方

ただ個人的には Escape で終了を無効化すると色々と捗らないので、ポーズ画面はEscapeキーとPauseキーの両方にバインドし、PauseキーのDebugExecBindingsだけを無効化するのが一番かなと思ってます。
エディタ上ではPauseキーのみで確認し、Shippingでは両方が有効になっているといった状態です。