情報は力ではない

UE4 とか Blender とか。

EnhancedInput で同時押しを実現する

Enhanced Input プラグインを使って同時押し(例えば Shift + マウス左クリック)を実現したいと思ったので、やり方を調べた時のメモです。

Enhanced Input プラグインについて

ユーザー入力のためのプラグインで UE 4.26 から使用可能(なはず)です。この記事を記載時はまだ実験的な機能です。 使い方については詳細を省きます。

docs.unrealengine.com

同時押しについて

今回の記事で説明する同時押しは Shift + マウス左クリックです。より具体的には Shift を押下中にマウス左クリックで Input Action をトリガーすることを目指します。

同時押しの実現方法

ユーザー入力を受け付けるために Input Action を Input Mapping Context に登録していきます。Input Action に割り当てる入力は複数設定できます。設定したいずれかの入力が行われると Input Action がトリガーされるようなイメージです。
ですので、単純な設定では同時押しが実現できないと思います。

同時押しを実現するためには Triggers の設定値 Chorded Action を使用します。
Chorded Action は Input Action をトリガーするためには、他の Input Action がトリガーされていることを条件とするという設定になります(Input Action 1 をトリガーするには Input Action 2 がトリガーされていないといけないといった設定が可能)。

今回の Shift + マウス左クリックの場合 Chorded Action を使用し、マウス左クリックに対応する Input Action をトリガーするには Shift に対応する Input Action がトリガーされていないといけない、というような設定を行います。

上記の設定を行なったのが下図になります。
下図では、マウス左クリックに対応する Input Action は IA_StrongRightHandedAttack Shift に対応する Input Action は IA_Modifier としています。

IA_StrongRightHandedAttack の設定で Chorded Action を設定し IA_StrongRightHandedAttack をトリガーするには IA_Modifier がトリガーされていることを条件として設定してます。すなわち IA_StrongRightHandedAttack をトリガーするには IA_Modifier に対応する入力 Shift が押下されていること(Hold)が条件となります。
IA_StrongRightHandedAttack の Triggers には Pressed も設定していますが、これがないと Shift を押下中ずっと IA_StrongRightHandedAttack がトリガーされてしまうためです。今回はトリガーされるのは1度にしたかったので Pressed を設定しています。

※ 各 Input Action アセットの Triggers は設定しておらず Input Mapping Context 内でのみ Triggers を設定しています。

上記のような設定を行うと Enhanced Input プラグインにて同時押しを実現できるかと思います。

以上になります。
ここまで読んでいただき、ありがとうございます。