UE5 C++で「Enhanced Input」をバインドするためにクラスとアセットを準備する(UInputAction、FGameplayTag、UDataAsset)
こちらを参考にさせていただきました。
・Enhanced Input Binding With Gameplay Tags C++
https://dev.epicgames.com/community/learning/tutorials/aqrD/unreal-engine-enhanced-input-binding-with-gameplay-tags-c
上記サイトはC++で「Enhanced Input」をバインドする方法を公式さんが公開しているものになります。
今回は上記をもとに準備を行います。
公式ドキュメントはこちら。
・Enhanced Input プラグイン
https://docs.unrealengine.com/4.26/ja/InteractiveExperiences/Input/EnhancedInput/
まずは「入力アクション(Input Action)」と「ゲームプレイタグ(GameplayTag)」を紐づけるための構造体を作成します。
#include "GameplayTagContainer.h"
// 前方宣言
class UInputAction;
// Input Action と GameplayTag を紐づけるための構造体
USTRUCT(BlueprintType)
struct FTagInputAction
{GENERATED_BODY()public:// InputAction};
UPROPERTY(EditDefaultsOnly)
const UInputAction* InputAction = nullptr;
// GameplayTag
UPROPERTY(EditDefaultsOnly)
FGameplayTag InputTag;
次に上記の構造体をデータアセット(DataAsset)として登録や取得ができるように定義します。
#include "Engine/DataAsset.h"
// Input Action と Gameplay Tag を紐づけた「データアセット(DataAsset)」を作成
UCLASS(BlueprintType)
class UNewInputConfig : public UDataAsset
{GENERATED_BODY()public:// コンストラクタ
UNewInputConfig(const FObjectInitializer &ObjectInitializer);
// GameplayTag から InputAction の取得
const UInputAction* FindInputActionForTag(const FGameplayTag& InputTag) const;public:// FTagInputAction 配列UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Meta = (TitleProperty = "InputAction"))
TArray< FTagInputAction> TagInputActions;};
次に実体はこんな感じになります。
※コンストラクタは中身が空で問題ないので省略します。
「データアセット(DataAsset)」として登録されたものの中から// GameplayTag から InputAction の取得
const UInputAction* UNewInputConfig::FindInputActionForTag(const FGameplayTag& InputTag) const
{// すべてを対象として検索
for(const FTagInputAction& aTagInputAction : this->TagInputActions){// GameplayTag が一致
if(aTagInputAction.InputAction && aTagInputAction.InputTag == InputTag){return (aTagInputAction.InputAction);}}
return (nullptr);}
「ゲームプレイタグ(GameplayTag)」が一致するものがあれば「入力アクション(Input Action)」を返す。といったものですね。
これでC++側の準備は完了です。
次にエディタで上記「データアセット(DataAsset)」を作成します。

まずは「データアセット(DataAsset)」の作成をメニューから選択します。
「データアセット(DataAsset)」のクラス設定で上記で作成したクラスを指定します。

今回は「NewInputConfig」というクラスになります。
するとこんな感じの「データアセット(DataAsset)」を設定するウィンドウが開くので設定していきます。

「入力アクション(Input Action)」と「ゲームプレイタグ(GameplayTag)」が1セットになっているので
作成した「入力アクション(Input Action)」を設定し、それに対応する「ゲームプレイタグ(GameplayTag)」も指定します。
C++でバインドするときには、この「ゲームプレイタグ(GameplayTag)」を使って
「入力アクション(Input Action)」を取得することになります。
あとは、実際にC++のゲーム側でバインドをするのみとなります。
| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑