fc2ブログ

凛(kagring)のUE5/UE4とゲーム制作と雑記ブログ

2016 年から UE4 / 2021年から UE5 を触り始めました。勉強したもののメモ用ブログです。ゲーム制作に関するメモや雑記とか色々あります。C++ での Qt、Unity もほんの少しあります。

PREV | PAGE-SELECT | NEXT

≫ EDIT

UE5 C++で「Enhanced Input」をバインドするためにクラスとアセットを準備する(UInputAction、FGameplayTag、UDataAsset)

C++で「Enhanced Input」をバインドするためにクラスとアセットを準備する方法です。

こちらを参考にさせていただきました。

・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;
};


次に実体はこんな感じになります。
※コンストラクタは中身が空で問題ないので省略します。

// 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);
}

「データアセット(DataAsset)」として登録されたものの中から
「ゲームプレイタグ(GameplayTag)」が一致するものがあれば「入力アクション(Input Action)」を返す
。といったものですね。

これでC++側の準備は完了です。

次にエディタで上記「データアセット(DataAsset)」を作成します。
EnhancedInputCpp000.jpg
まずは「データアセット(DataAsset)」の作成をメニューから選択します。

「データアセット(DataAsset)」のクラス設定で上記で作成したクラスを指定します。
EnhancedInputCpp001.jpg
今回は「NewInputConfig」というクラスになります。

するとこんな感じの「データアセット(DataAsset)」を設定するウィンドウが開くので設定していきます。
EnhancedInputCpp002.jpg
「入力アクション(Input Action)」と「ゲームプレイタグ(GameplayTag)」が1セットになっているので
作成した「入力アクション(Input Action)」を設定し、それに対応する「ゲームプレイタグ(GameplayTag)」も指定
します。

C++でバインドするときには、この「ゲームプレイタグ(GameplayTag)」を使って
「入力アクション(Input Action)」を取得
することになります。

あとは、実際にC++のゲーム側でバインドをするのみとなります。

| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑

COMMENT















非公開コメント

TRACKBACK URL

http://kagring.blog.fc2.com/tb.php/792-832a5aa5

TRACKBACK

PREV | PAGE-SELECT | NEXT