【UE5】Enhanced Input:Player Bindable Input Config
2024-04-04 追記:
【注意】
この記事は UE5.3 で非推奨な機能となっており、Enhanced Input User Settings を使うよう記載がございました。
しかし、Experimental な機能も含まれていたため今後変わるかもしれません。
またまた Enhanced Input です。
今回の記事では Enhanced Input のプラグインが有効になっているとコンテンツフォルダで右クリック> 入力(Input)に出てくる Player Bindable Input Config(UE5.1 だとPlayer Mappable Input Config) について見ていこうと思います。
https://youtu.be/aBI8n3Il0sg
このファイルを使ったキーコンフィグの実装例を動画にて作成しました。
始める前に
以降、日本語の説明がついているので UE5.1 で操作しますが UE5.0.x と違う部分が出るかもしれません。
また、ソースコードを見れるスキルはないため Blueprint での操作・お話を前提としております。
Player Bindable Input Config / Player Mappable Input Config の名前について
※注:UE5.3 で非推奨な機能になっています。
UE5.0.x と UE5.1 で名前が若干違います。
(UE5.0.x では Bindable、UE5.1 では Mappable)
一応日本語用と英語用の名前も画像で載せましたが中身は同じです。
Enhanced Input を使う前の入力では「プロジェクト設定」> 「インプット」で軸マッピングやアクションマッピングという名前だったので、"マッピング" という名前の方がしっくりきますね。
UPlayerMappableInputConfig
このファイルは UPlayerMappableInputConfig になっていて色々中身を登録できるようになっています。
URL に PythonAPI と書いてますが使用できそうな関数や変数、簡単な説明が確認できます。
https://docs.unrealengine.com/5.0/en-US/PythonAPI/class/PlayerMappableInputConfig.html
関数の名前や説明、そしてこのファイルのポップアップからなんとなくキーコンフィグに使えそうな雰囲気があります。
Player Bindable Input Config / Player Mappable Input Config を作成
コンテンツブラウザで右クリック> 「入力(Input)」から「Player Bindable Input Config」または「Player Mappable Input Config」を作成可能です。
作成後、何もせずにすぐ保存するとエラーが発生します。
「有効なConfigNameがありません!」と分かりやすく書いてくれています。このファイルを開いてみます。
先頭の「ConfigName:None」を指しています。なんでもいいので任意の名前を付ければこのエラーは解消されます。
とりあえず中身をこのようにしてみました。
Config Name:この構成を識別するための一意の名前のようです。サフィックスに分かりやすく _ConfigName とつけてみました。
Config Display Name:この機能に限らず「Get Display Name」という関数を使い、デバッグ用途で画面出力を行い確認することも多いですが、恐らくこれもそういう用途ではないかと思います。サフィックスに分かりやすく _DisplayName とつけてみました。
▼「Get Display Name」
https://docs.unrealengine.com/5.1/en-US/BlueprintAPI/Utilities/GetDisplayName/
Is Deprecated:このファイルが非推奨かどうかをマークするために利用するフラグのようです。新しく作成して以前のものは非推奨にとかそういう用途なんでしょうか。
MetaData:ポップアップには「アイコン、アビリティ、アセットなど、キーマッピングに関連する他の項目を格納するために使用できるメタデータ」と書いてあります。必要な情報をプラスで紐づける時に利用するんだと思います。
Contexts:IMC の配列です。このファイルの利用用途が主にキーコンフィグを扱いやすくするためにデータをまとめるためなので、キーコンフィグに利用したい IMC を右の入力欄(Priority)とセットで登録します。
配列で複数登録できるので、今回はプレイヤーの基本移動と弾を発射する IMC をそれぞれ登録してみました。
ファイルの準備は一旦こんな感じでいきます。
変数の作成
"Player Mappable Input Config" 型の変数をオブジェクト参照で追加し、変数名はそれぞれの頭文字を取って PMIC としています。
初期値には先程作ったファイルを設定しています。
Get Config Name/Get Display Name
先程サフィックスにそれぞれ _ConfigName / _DisplayName と付けましたがそれが出力されていることが分かります。
Get Mapping Contexts
PMIC 内で登録した IMC の一覧を取得できます。
戻り値は、"Input Mapping Context" が Key
Priority である "Integer" が Value のマップになっています。
これは先程設定したこの画像の下にある IMC と Priority のセットが返ってきます。
必要なキーを取得するための設定
ゲームによってはキャラの移動やマウスのカメラ移動など、キーコンフィグにそもそも使用されないキーが出てくることがあります。
キーコンフィグで利用したいキーだけ自分で設定し、必要な情報だけ取れるようにする設定です。
PMIC はこれを目的で利用する事がメインになると思いますが、利用するために少し準備が必要です。
キーの割り当ては IMC 内で行いますが、そのキー1つ1つに "Is Player Mappable" というフラグが存在します。
このフラグを ON にし、"Player Mappable Options" の中にある "Name" に好きな名前を登録すれば準備完了です。
今回の例ではジャンプに利用するスペースバーと、ゲームパッドAボタンのみ設定しました。
(Name は None や空欄になっているとエラーが発生します)
Get Player Mappable Keys:必要なキーだけ取得
先に BP を載せておきます。
PMIC から「Get Player Mappable Keys」を呼びます。
戻り値は Enhanced Action Key Mapping 構造体の配列です。
Enhanced Input の入力設定が詰まった構造体です。
画像のように構造体ピンを分割すると、Triggers や Modifiers など見覚えのある情報が表示されると思います。
今回の例では、この中の Key から「Get Key Display Name」を使って割り当てたキーを表示するということをしてみました。
結果はこの画像の右上の通り、ジャンプに利用するスペースバーと、ゲームパッドAボタンが出力されました。
"Is Player Mappable" にチェックを入れて設定した情報のみが出力されることが分かりました。
この関数は、PMIC に登録さえできていれば「Add Mapping Context」で追加されていなくてもキーの情報が取得できる点が優れています。
ゲーム開始時には「Add Mapping Context」されていない IMC もキーコンフィグの対象になっている場合はこのファイルを使うと色々扱いやすいと思います。
Add Player Mappable Config(2024-04-04修正)
※注:UE5.3 で廃止され、この関数が利用出来なくなりました
書き忘れてたので追記。
「Add Mapping Context」では1つの IMC を追加できますが、この関数を使うことで複数の IMC を一気に追加することが可能です。
"Config" に「Player Bindable Input Config」または「Player Mappable Input Config」を指定するだけです。
(追加したい IMC と Priority はそれぞれアセット内で設定します)
キーコンフィグ以外の使い方になりますが、例えばゲーム開始時に追加する IMC が複数ある場合、このアセットに登録しておくことで「Add Player Mappable Config」を一回呼べば済むのでノードをすっきり出来るかもしれません。
ゲーム内で IMC を複数登録したり外したりを繰り返すような実装の場合は便利かもしれません。
最後に
最初このファイルの利用用途が分からなさすぎて、どういう使い方をするのかさっぱりでした。
色々検証している間に Is Player Mappable のフラグがここで絡んでたんだなと勉強になりました。
この情報を使えばキーコンフィグの処理をする際の準備も簡単に出来そうだなと思いました。
仕様変更に追いつけない...