0. 개요

향상된 입력(Enhanced Input)을 이용하여 버튼을 누르면 어빌리티를 활성화하는 방법에 대해서 알아본다.

런타임에 어빌리티 작동 버튼에 대한 매핑을 변경할 수 있게 한다.

각 입력에 대해 게임플레이 태그를 가지게 한다.

 

 

1. 입력 액션과 태그 - AuraInputConfig

#include "CoreMinimal.h"
#include "Engine/DataAsset.h"
#include "GameplayTagContainer.h"
#include "AuraInputConfig.generated.h"

USTRUCT(BlueprintType)
struct FAuraInputAction
{
	GENERATED_BODY()

	UPROPERTY(EditDefaultsOnly)
	const class UInputAction* InputAction = nullptr;

	UPROPERTY(EditDefaultsOnly)
	FGameplayTag InputTag = FGameplayTag();
};

각 입력 액션에 대해 태그를 연결하는 구조체를 생성한다.

 

 

2. 입력 액션의 태그를 이용해 어빌리티 찾기 - FindAbilityInputActionForTag

UCLASS()
class AURA_API UAuraInputConfig : public UDataAsset
{
	GENERATED_BODY()

public:

	const UInputAction* FindAbilityInputActionForTag(const FGameplayTag& InputTag, bool bLogNotFound = false) const;

	UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
	TArray<FAuraInputAction> AbilityInputActions;
	
};

 

#include "Input/AuraInputConfig.h"
#include "InputMappingContext.h"

const UInputAction* UAuraInputConfig::FindAbilityInputActionForTag(const FGameplayTag& InputTag, bool bLogNotFound) const
{
	for (auto& InputAction : AbilityInputActions)
	{
		if (InputAction.InputAction && InputAction.InputTag.MatchesTagExact(InputTag))
		{
			return InputAction.InputAction;
		}
	}

	if (bLogNotFound)
	{
		UE_LOG(LogTemp, Error, TEXT("InputConfig [%s]에서 InputTag [%s]를 가지는 Ability Input Action을 찾을 수 없음"), *GetNameSafe(this), *InputTag.ToString());
	}

	return nullptr;
}

인수로 받아온 태그를 이용하여 입력 액션-태그 배열에서 해당 액션을 찾아 반환하는 함수이다.

 

 

3. 태그 추가 - AuraGameplayTags

	// 마우스 클릭
	FGameplayTag InputTag_LMB;
	FGameplayTag InputTag_RMB;

	// 숫자 입력
	FGameplayTag InputTag_1;
	FGameplayTag InputTag_2;
	FGameplayTag InputTag_3;
	FGameplayTag InputTag_4;

헤더의 public 섹션에 마우스 좌, 우, 1~4 까지의 숫자 키에 해당하는 태그를 추가한다.

	/*
	*  입력 태그
	*/

	GameplayTags.InputTag_LMB = UGameplayTagsManager::Get().AddNativeGameplayTag(
		FName("InputTag.LMB"),
		FString("Left Mouse Click")
	);
	
	GameplayTags.InputTag_RMB = UGameplayTagsManager::Get().AddNativeGameplayTag(
		FName("InputTag.RMB"),
		FString("Right Mouse Click")
	);

	GameplayTags.InputTag_1 = UGameplayTagsManager::Get().AddNativeGameplayTag(
		FName("InputTag.1"),
		FString("Number 1 Button")
	);

	GameplayTags.InputTag_2 = UGameplayTagsManager::Get().AddNativeGameplayTag(
		FName("InputTag.2"),
		FString("Number 2 Button")
	);

	GameplayTags.InputTag_3 = UGameplayTagsManager::Get().AddNativeGameplayTag(
		FName("InputTag.3"),
		FString("Number 3 Button")
	);

	GameplayTags.InputTag_4 = UGameplayTagsManager::Get().AddNativeGameplayTag(
		FName("InputTag.4"),
		FString("Number 4 Button")
	);

 

 

4. Input Config 데이터 에셋 블루프린트 생성

(1) Blueprints - Input에서 우클릭 - 기타 - 데이터 에셋을 클릭한다.

(2) AuraInputConfig를 부모로 하는 블루프린트 DA_AuraInputConfig를 생성한다.

 

 

5. 입력 액션(Input Action) 생성 및 할당

어빌리티 활성화를 위한 1차원 축 입력 액션을 생성한다.

각 버튼에 대해서 생성한다.

 

이제 입력 매핑 컨텍스트(Input Mapping Context)에서 각 입력 액션에 키를 할당한다.

 

 

6. 입력 액션에 대해 태그 연결 - DA_AuraInputConfig