PaperSloth’s diary

主にゲーム開発関連についての記事を書きます。

UE4 KeyConfigの作成、Keyの変更/追加/削除について

環境

UE4.25.3
Windows 10 Pro

概要

以前にこんな記事を書いてKeyConfig用のサンプルを添えたPluginを作成しました。
papersloth.hatenablog.com

ですが、エンジンの標準機能でBlueprintのみでもKeyの再設定/追加/削除を行う方法があるため、今回はそちらを紹介します。

Action/Axis Mappingsの簡単なおさらい

まずはProjectSettingsのAction Mappings/Axis Mappingsについての簡単なおさらい。
「Edit -> Project Settings」からProject Setteingsを開きます。
f:id:PaperSloth:20201011170853p:plain

その中の
「Engine/Input」の中で各種Action/AxisのMappingを行うことができます。
Action名/Axis名に対してMouse / Keyboard /Gamepad等のボタンやスティック等を割り当てることで
簡単にゲームの入力に対する操作の定義が可能です。
f:id:PaperSloth:20201011171004p:plain

これらはProject Settingsで登録しておき、ゲーム中での変更方法が分からずKey Configの作成で苦労されたという方も多いのではないかと思います。
これらを簡単にゲーム中で変更可能なのが今回紹介するInput Settingsの各ノードになります。

Input Settingsについて

UE4の標準のノードでKey関連の変更を行う際は「UInputSettings」classを使用します。
このクラスはUObject継承のため、Level上に配置することはできません。

Blueprintで取得するには「Get Input Settings」ノードを使用します。
f:id:PaperSloth:20201011170015p:plain

Input Settingsに対してBlueprintから呼び出し可能なノードは以下になります。
f:id:PaperSloth:20201011170126p:plain

名前から察するにProject SettingsのInputで設定した
Action Mappings/Axis Mappingsに対して何かしらの操作が行えそうですね。

もう少し詳細を見ていきましょう。

Input Settingsからアクセス可能なノードの基本的な使い方について

まずはAction Mappingsに対して操作可能なノードが以下になります。
f:id:PaperSloth:20201011172919p:plain

続いてAxis Mappingsに対して操作可能なノードが以下になります。
f:id:PaperSloth:20201011173038p:plain

コメントでも簡単な説明をしてありますが、Actionに対してもAxisに対しても同じようなノードで操作することが可能ですね。
Add Action/Axis Mappings, Remove Action/Axis Mappingsについての説明をしていきますが
その前に引数の「Key Mappings」についての説明を行います。
Actionの場合は「Input ActionKeyMappings」構造体を使用し
Axisの場合は「InputAxisKeyMappings」構造体を使用します。

まずはActionの方から解説していきます。
構造体を分割するかMakeして構造体を引数として設定可能な形式に変換/作成します。
f:id:PaperSloth:20201011174724p:plain

構造体の中で重要になってくるのが、「Action Name」と「Key」になります。
f:id:PaperSloth:20201011174756p:plain

Actionとして登録/削除/変更したい名前と、そのActionに対するKeyを設定する部分になります。
例えば「Jump」に対して「Space Key」を割り当てたい場合は以下のようになります。
f:id:PaperSloth:20201011175012p:plain

構造体のメンバ変数として4つのbooleanがありますが、これらはそれぞれ
Shift + KeyやCtrl + KeyやAlt + KeyやCmd + Keyの設定になります。
使うことはほぼないでしょうが、「Shift + Ctrl + A」のような複数のKeyを押す操作にも対応しています。

そして、これらの操作をEditor上で実行すると即時Project Settingsにも反映されるようになっています。


続いてAxis側の解説になります。
こちらは先程よりもう少しシンプルな構造体になっています。
f:id:PaperSloth:20201011180401p:plain
Axis名とScale値とKeyの3つを登録するだけです。

例えば前進の移動にGamepadの左スティックのY軸を割り当てたい場合は以下のようになります。
f:id:PaperSloth:20201011180534p:plain

こちらもAction同様にEditor上で実行するとProject Settingsに即時反映されます。


最後にAction / Axis双方で共通する引数の「Force Rebuild Keymaps」フラグについてです。
こちらを有効化している場合は変更を行った際にゲーム内で即時反映されますが
フラグを折っている場合にはProject Settingsには登録されますが、入力はまだ反映されません。
内部的な話をするとこちらが有効になっている場合はInput Settingsの内容が「UPlayerInput」に反映されるようになっています。

Key Config画面で変更中は未反映のまま登録を行い、最後に一括で反映する等でよいと思います。
そういった場合に使用するのが「Force Rebuild Keymaps」ノードになります。
f:id:PaperSloth:20201011181027p:plain


最後にもう1つだけ紹介していないノードがあります。
「Save Key Mappings」というノードです。
f:id:PaperSloth:20201011181211p:plain

コメントに書いた内容そのままですが、(ProjectRoot)/Saved/Config/Windows/Input.ini に更新内容を上書きします。
Editorで実行している際にはあまり意識することがないかもしれませんが
実際にPackage化してゲーム公開後にはこのノードを使用することを勧めます。
これでKey Configで保存した内容が次回ゲーム起動時にも反映されるようになります。

Package化した後のGame中で使用した場合にはこの変更内容は
(PackageRoot)/Saved/Config/WindowsNoEditor/Input.ini に保存されるようになります。

まとめ

これでKey Config作成に必要な一通りのノードが紹介できたかと思います。
実際にKey Configを作成する際にはGamepadとKeyboardの割当を分けるなど色々と必要な機能があるかと思います。

ある程度は最初に紹介したPluginの組み方を参考に回避できる部分もあるかもしれません。
最低限あった方が良いサンプルとして載せておくと、Keyの構造体からは
入力内容がGamepadかKeyboardかMouseかを判別するノードがありますので、実装の際にはこちらを使用する等して処理を分けるとよいでしょう。
f:id:PaperSloth:20201011181726p:plain

他にもMarketplaceで公開されているアセットを探して購入してみてもいいかもしれませんね。
最後にInput Settingsから呼び出し可能な全ノードを公開しておきます。
f:id:PaperSloth:20201011181825p:plain

以上です!