UE5のEnhanced Inputについて
始めに
UE5ではEnhanced Inputという強化された入力システムがデフォルトで
オンになってます。
FPSやTPSのテンプレートでも使われておりこれらの意味が分からなかったので
備忘録という意味で記事を書きました。
この新機能はボタン長押しや、指定秒数間だけ押した後に
入力を発行するなどかなり高度なことができます。
そしてこの様な機能を利用するために
・InputAction
・Input Mapping Context
という2つのアセットを作成する必要があります。
今回はゲームでよくある「2秒間押し続けたら攻撃をする」という処理を
やりたいと思います。
目次
結論
いきなりですがこのような処理を書き
ボタンを2秒間押し続けると
以下のような結果になります。
処理の流れ的には最初に
- 登録したボタンを押したとき、Startedの処理を実行
- そのボタンを2秒間押し続けたときにTriggeredの処理を実行
という感じです
解説
上記のことを行うのにEnhanced Inputを使用しますが
このEnhanced Inputを使用するには2つのアセットを作成して
セットアップを行う必要があります。
まず適当にTPSテンプレートプロジェクトを作成したら右クリックから
・InputAction
・Input Mapping Context
というアセットを作成します。
- InputAction
従来のBindAxisとBindActionをまとめて更に長押し等の高度なことを定義できるアセットです - Input Mapping Context
定義したInputActionをまとめて複数まとめて管理するアセットです。
まずInputActionを作成して、適当に名付けした後それを開くと以下の画像のように
なります(今回は攻撃という意味でIA_Attackにしました)。
線で引かれてる部分に注目してほしいのですが
- Value Type
入力イベント時に出力する値の型を決めます。 - Triggers
これはイベントを発行する為の条件をここで定義します右のプラスボタンを押すと以下のようになります。
- Down
ボタンを押してる間だけTriggerを発行する - Hold
指定秒数間だけボタンを押し続けるとTriggerを発行する - Pressed
ボタンを押した時だけTriggerを発行する - Released
ボタンを離した時だけTriggerを発行する
- Down
- Modifiers
入力情報を加工する。右のプラスボタンを押すと以下のようになります。
- Negate
指定の軸に対して値を反転します。
X軸なら本来1.0が出力されるのが-1.0になります。 - Swizzle Input Axis Values
入力軸の値を指定のOrder順に入れ替えて調整する。
- Negate
説明は大体こんな感じです。
さて、先ほど作成したInputActionの設定はこんな感じになりました
攻撃は2秒間溜めた後に行いたいので上の画像のような設定にします。
次に作成したInputActionをMappingContextに登録します
Mappingsの横にあるプラスボタンを押すと以下の様に登録できるので
作成したInputAction(IA_Attack)を登録します。
登録すると以下のようになります。
ここで登録したInputActionにはどのキーを対応させるかを決定します。
ここまで行ったらセットアップは完了です!!
以下の画像のように登録したInputAction名(IA_Attack)のイベント関数を
検索ボックスから出現させることができます
画像を見ると様々な入力ピンがありますがそれぞれ意味があります。
- Triggered
指定した条件によってTriggerが発生した時、もしくは発生中に
入力イベントを発行します - Started
Triggerの条件を検知する時に、入力イベントを発行します - Complited
Triggerが終了した時に入力イベントを発行します - Canceled
Triggerが発生しなかった時に入力イベントが発生します - Action Value
InputActionアセットの部分で定義したものが表示されます。
なお、作成したInputActionからイベントを動作させるには
最初に以下の処理を書く必要があります
これは作成したInput Mapping Contextを登録するという処理です
これでようやく入力処理を実行することができます。
結論再び
最初の画像と同じですがセットアップを行った後、このような処理を書いた後に
指定したボタンを2秒間押し続けると
チャージ開始
チャージ攻撃!!
と表示されるはずです、実際に試してみると。
予想通りの結果になりました。
まとめ
手順としては
- InputActionとInput Mapping Contextを作成する
- InputActionに入力の定義を行う
- 作成したInputActionたちをInput Mapping Contextに登録して
キーバインディングを行う - BP上で処理を記述する
最初は従来のBindingInputと違い結構設定項目があり戸惑うかもしれませんが
慣れてくるとかなり高度なことができると思います。
皆さんもぜひいろいろいじって試してみて下さい