티스토리 뷰
Gameplay Ability System - Top Down RPG / Section 9-5
Just Move 2026. 7. 8. 05:32Aura Input Component
이전에 만든 Input Config(입력 구성)과 Gameoplay Tag를 실제 입력 처리에 연결해줄 것이다.
기존에는 PlayerController에서 입력을 직접 바인딩했지만, 이번에는 입력 처리를 전담하는 Custom Input Component를 만들어 PlayerController의 역할을 단순화해줄 것이다.
기존 PlayerController의 입력 바인딩 방식을 확인해보면 다음과 같다.
EnhancedInputComponent->BindAction(
MoveAction,
ETriggerEvent::Triggered,
this,
&AAuraPlayerController::Move
);
-> MoveAction 입력이 들어오면 Move() 함수 호출
-> (Input Action -> BindAction() -> Move())
BindAction의 정의를 보면 여러 오버로드가 존재한다.
우리가 사용할 형태는 다음과 같다.
BindAction(
InputAction,
TriggerEvent,
Object,
Function
)
-> Input Action, TriggerEvent, 호출 대상(Object), 호출할 함수(Function Pointer)
또한 BindAction()의 정의를 살펴보면 typename... VarTypes라는 문법을 볼 수 있는데, 이는 가변 템플릿(Variadic Template)을 의미한다.
가변 템플릿은 0개 이상의 추가 타입(인수 타입)을 받을 수 있으므로, void Func(), void Func(int), void Func(FGameplayTag)처럼 서로 다른 매개변수를 가지는 함수도 동일한 템플릿으로 처리할 수 있다.
우리가 원하는 것은 PlayerController에서 입력 바인딩을 직접 하지 않고, 대신 Input Config만 넘길 것이다.
나머지는 AuraInputComponent가 알아서 처리하도록 할 것이다.
PlayerController
↓
AuraInputComponent
↓
Input Config 순회
↓
BindAction 수행
이를 위해 Custom Input Component를 위한 새 C++ 클래스부터 생성해주자.


여기서는 PlayerController가 호출할 함수 하나를 작성해줄 것이다.
이 함수를 통해 Input Config에 들어 있는 모든 입력을 자동으로 바인딩할 수 있다.
해당 함수는 UAuraInputConfig를 인수로 사용하지만, 전방 선언은 사용하지 않는다.
그 이유는 이번에 작성할 함수가 템플릿 함수이기 때문이다. (컴파일 시점에 실제 코드 생성)
템플릿 함수는 일반적으로 헤더 파일에서 정의되어야 하며, 함수 내부에서 UAuraInputConfig의 멤버에 접근해야 한다.
따라서 전방 선언만으로는 부족하므로, #include "AuraInputConfig.h"를 작성해준다.
매개변수로는 InputConfig, Object, PressedFunc, ReleasedFunc, HeldFunc을 전달받는다.
InputConfig는 어떤 입력을 바인딩할지에 대한 정보(InputAction과 Gameplay Tag)를 담고 있는 데이터 에셋이며, Object는 콜백 함수를 실제로 가지고 있는 객체이다.
PressedFunc, ReleasedFunc, HeldFunc은 각각 입력을 눌렀을 때, 입력을 뗐을 때, 누르고 있는 동안 실행할 콜백 함수이다.

템플릿 함수이므로 이어서 헤더에서 내용을 구현한다.
가장 먼저 Inpuct Config의 유효성을 검사한다.
그리고 Input Config 내부를 반복하며, 각 입력마다 Input Action 및 Gameplay Tag가 유효한지 체크한다.
모두 이상이 없다면 각 콜백 함수(Pressed, Released, Held)에 대해 바인딩을 수행한다.
기본 골자는 PlayerController에서 했던 바인딩과 같지만, 여기서는 추가적으로 GameplayTag를 인수로 받는다.
TriggerEvent를 통해 입력을 눌렀을 때는 Started, 입력을 뗐을 때는 Completed, 입력을 누르고 있는 동안에는 Triggered를 사용한다.

결과적으로는 PlayerController에서 bindAbilityAciton 함수를 한 번만 호출하면 된다.
그러면 AUraInpuComponent가 자동으로 다음과 같은 작업을 모두 수행한다.
Input Config
↓
AbilityInputActions 반복 탐색
↓
InputAction 확인
↓
Gameplay Tag 확인
↓
Pressed 바인딩
↓
Held 바인딩
↓
Released 바인딩
기존에는 입력이 늘어날수록 하나하나 바인딩 작업을 하여 PlayerController 코드가 계속 증가했지만, 이번과 같은 구조는 입력이 추가되어도 PalyerCOntroller를 수정할 필요가 거의 없다.
그저 Input Config에 Input Acton과 Gameplay Tag만 추가하면 자동으로 처리된다.
'Study > [Unreal] Udemy 강의' 카테고리의 다른 글
| Gameplay Ability System - Top Down RPG / Section 9-7 (0) | 2026.07.09 |
|---|---|
| Gameplay Ability System - Top Down RPG / Section 9-6 (0) | 2026.07.09 |
| Gameplay Ability System - Top Down RPG / Section 9-4 (0) | 2026.07.07 |
| Gameplay Ability System - Top Down RPG / Section 9-3 (0) | 2026.07.06 |
| Gameplay Ability System - Top Down RPG / Section 9-2 (0) | 2026.07.03 |
