본문 바로가기

게임프로그래밍/실습2

[실습2] 40. 인풋과 게임플레이 태그 연결하기

1. Input Config Data Asset

 

능력을 시행시키기 위해 키보드나 마우스등의 조작을 해야하고 이 조작을 식별할 수 있어야 한다. 데이터 에셋을 만들어 게임플레이 태그와 향상된 인풋을 연결하여 이를 구분할 수 있도록 할 것이다.

 

데이터 에셋을 만들어보도록 하자.

 

 

이제 이 클래스에서 인풋 액션과 태그를 연결할 구조체를 만들어준다.

USTRUCT(BlueprintType)
struct FAuraInputAction
{
    GENERATED_BODY()

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

 

사실 위 구조체의 경우 멤버변수가 2개 밖에 없어 구조체가 아닌 Map으로 구현해도 결과는 비슷하지만 구조체의 경우 더 많은 기능들을 넣을 수 있어 유연성을 보장한다. 정말 Map으로 구현하고 싶으면 그렇게 해도 상관은 없다.

 

이제 이 구조체를 저장할 배열을 만들자.

 

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

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

 

이제 이 배열에서 태그를 통해 인풋 액션을 찾는 함수를 만들 것이다.

 

public:
    const UInputAction* FindAbilityInputAction(const FGameplayTag& InputTag, bool bLogNotFound = false) const;
const UInputAction* UAuraInputConfig::FindAbilityInputAction(const FGameplayTag& InputTag, bool bLogNotFound) const
{
    for (const FAuraInputAction& Action : AbilityInputActions)
    {
       if (Action.InputAction && Action.InputTag == InputTag)
       {
          return Action.InputAction;
       }
    }
    
    return nullptr;

}

 

 

이제 이 인풋과 연결할 태그들을 만들어주면 된다.


2. 에디터에서 인풋 데이터 에셋 설정하기

 

데이터 에셋을 만들어주자.

 

여기서 이제 서로 서로 연결할 수 있다. 이 작업을 끝내면 된다.