* Input 바인딩용 클래스 생성
기존 : PC에서 바인딩해줬음
void AAuraPlayerController::SetupInputComponent()
{
Super::SetupInputComponent(); // 부모 클래스의 SetupInputComponent() 함수 호출
// InputComponent를 UEnhancedInputComponent 형으로 변환하고 검사합니다.
//Get 인핸스드 인풋 컴포넌트
UEnhancedInputComponent* EnhancedInputComponent = CastChecked<UEnhancedInputComponent>(InputComponent);
// MoveAction이 발생할 때 AAuraPlayerController 클래스의 Move() 함수를 바인딩합니다.
//옵션 : 트리거(누르고있을때), 컴플리트(눌렀다 뗏을때)
//특정키가(에디터IMC에서 설정한) 눌럿을때, Data 목록 중 Move함수를 실행해라.
EnhancedInputComponent->BindAction(InputActions->InputMove, ETriggerEvent::Triggered, this, &AAuraPlayerController::Move);
EnhancedInputComponent->BindAction(InputActions->RightClickThenMoveThere, ETriggerEvent::Triggered, this, &AAuraPlayerController::RightClickMove);
}
- 개선 : 바인딩전용 클래스를 만들고 거기안에서 바인딩함
키눌렀을때, 누르는중, 뗏을때 바인딩하는 함수 구현
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "AuraInputConfig.h"
#include "EnhancedInputComponent.h"
#include "AuraInputComponent.generated.h"
/**
*
*/
UCLASS()
class AURA_API UAuraInputComponent : public UEnhancedInputComponent
{
GENERATED_BODY()
public:
template<class UserClass, typename PressedFuncType, typename ReleasedFuncType, typename HeldFuncType>
void BindAbilityActions(const UAuraInputConfig* InputConfig, UserClass* Object, PressedFuncType PressFunc,
ReleasedFuncType ReleasedFunc, HeldFuncType HeldFunc); //헤더포함 => 템플릿 함수 만들려고
};
//UserCLass에 아무 Class나 들어올수있음! 유사 template<class T>
template <class UserClass, typename PressedFuncType, typename ReleasedFuncType, typename HeldFuncType>
void UAuraInputComponent::BindAbilityActions(const UAuraInputConfig* InputConfig, UserClass* Object,
PressedFuncType PressFunc, ReleasedFuncType ReleasedFunc, HeldFuncType HeldFunc) //키눌렀을때, 누르눈중, 뗏을때 바인딩해주는 함수
{
check(InputConfig); //입력받은 매개변수 체크
for(const FAuraInputAction& Action : InputConfig->AbilityInputActions)
{
if(Action.InputAction && Action.InputTag.IsValid())
{
if(PressFunc) //눌렀을때 콜백됨
{
BindAction(Action.InputAction, ETriggerEvent::Started, Object, PressFunc,Action.InputTag);
}
if(ReleasedFunc)
{
BindAction(Action.InputAction, ETriggerEvent::Completed, Object, ReleasedFunc,Action.InputTag);
}
if(HeldFunc)
{
BindAction(Action.InputAction, ETriggerEvent::Triggered, Object, HeldFunc,Action.InputTag);
}
}
}
}
* PC에서 콜백함수 구현(클릭이벤트 발생 테스트)
IC(액션-태그 매칭)를 PC의 변수추가
변수추가시 BP에서 의존성 주입 잊지말것!
UPROPERTY(EditDefaultsOnly,Category="Input")
TObjectPtr<UAuraInputConfig> InputConfig;
-3개의 콜백함수 구현
//3개의 콜백 함수
void AbilityInputTagPressed(FGameplayTag InputTag);
void AbilityInputTagReleased(FGameplayTag InputTag);
void AbilityInputTagHeld(FGameplayTag InputTag);
- 한꺼번에 바인딩!
EnhancedInputComponent를 [EnhancedInputComponent를 상속받은 AuraInputComponent로 교체함]
void AAuraPlayerController::SetupInputComponent()
{
Super::SetupInputComponent(); // 부모 클래스의 SetupInputComponent() 함수 호출
// InputComponent를 UEnhancedInputComponent 형으로 변환하고 검사합니다. -> 를 상속받은 AuraInput으로 cast
//Get 인핸스드 인풋 컴포넌트
UAuraInputComponent* AuraInputComponent = CastChecked<UAuraInputComponent>(InputComponent);
// MoveAction이 발생할 때 AAuraPlayerController 클래스의 Move() 함수를 바인딩합니다.
//옵션 : 트리거(누르고있을때), 컴플리트(눌렀다 뗏을때)
//특정키가(에디터IMC에서 설정한) 눌럿을때, Data 목록 중 Move함수를 실행해라.
AuraInputComponent->BindAction(InputActions->InputMove, ETriggerEvent::Triggered, this, &AAuraPlayerController::Move);
AuraInputComponent->BindAbilityActions(InputConfig,this,&ThisClass::AbilityInputTagPressed, &ThisClass::AbilityInputTagReleased,
&ThisClass::AbilityInputTagHeld);
}
- 디버깅용 코드 작성
void AAuraPlayerController::AbilityInputTagPressed(FGameplayTag InputTag)
{
GEngine->AddOnScreenDebugMessage(1,3.f,FColor::Red, *InputTag.ToString());
}
void AAuraPlayerController::AbilityInputTagReleased(FGameplayTag InputTag)
{
GEngine->AddOnScreenDebugMessage(2,3.f,FColor::Blue, *InputTag.ToString());
}
void AAuraPlayerController::AbilityInputTagHeld(FGameplayTag InputTag)
{
GEngine->AddOnScreenDebugMessage(3,3.f,FColor::Green, *InputTag.ToString());
}
- 프로젝트세팅에서도 EnhancedInputComponent를 Aura로 바꿔야함.
- nullptr 에러 -> InputConfig를 set 안해줬음
'UE5 > Gameplay Abilities' 카테고리의 다른 글
[UE5] Click To Move 구현 (0) | 2024.06.09 |
---|---|
[UE5] 태그에 맞는 능력 활성화 구현 (0) | 2024.06.09 |
[UE5] 태그-입력 연결 구현, 런타임에 입력변경 구현준비 (0) | 2024.06.09 |
[UE5] GA 옵션들 살펴보기 (0) | 2024.06.09 |
[UE5] GameplayAbility class 구현 (0) | 2024.06.09 |