- 개요
프로젝트에서 플레이어의 입력을 받아 처리하는 시스템을 구축한다
이때, 언리얼 엔진에서 제공하는 Lyra 프로젝트를 기반으로 입력 시스템을 구성하였다
Lyra 프로젝트에서는 입력을 2가지로 구분하여 처리한다
- 매 프레임 발생하는 입력 - 이동이나 시점 조작 등
- 일시적으로 발생하는 입력 - 점프나 공격 등
이때, 일시적으로 발생하는 입력에 대한 행동은 GAS 프레임워크의 Ability를 사용하여 구현하지만,
현재 프로젝트에서는 GAS 프레임워크를 사용하지 않으므로 다음과 같이 구현한다
- InputConfig 클래스 : InputAction과 Tag를 매핑하는 데이터 애셋
- PlayerActionBase 클래스 : GAS 프레임워크의 Ability를 대체하는 클래스
- 해당 클래스를 상속받아 일시적으로 동작하는 Input Action들의 행동을 정의
- PawnInputComponent 클래스 : HeroComponent를 대체하여 입력에 대한 콜백 함수를 제공하는 클래스
- ActionComponent 클래스 : GAS 프레임워크의 ASC를 대체하여 입력에 대한 IA의 행동을 실행 + 중단하는 클래스
- 스크립트 작업
1) 프로젝트명.build.cs 파일

Input Action에 사용할 Tag를 지정하기 위해 GameplayTags 모듈을 추가한다
2) SOO_PlayerController 클래스

프로젝트에서 사용할 PlayerController 클래스를 생성한다
3) SOO_InputConfig 클래스

Input Action과 Gameplay Tag를 묶어서 관리하는 SOO_TaggedInputAction 구조체를 생성한다

SOO_TaggedInputAction들을 저장하고 관리하는 SOO_InputConfig 클래스를 생성한다
2개의 멤버변수는 다음과 같다
- NativeInputActions 멤버변수 : 매 프레임마다 입력이 발생하는 Input Action들
- AbilityInputActions 멤버변수 : 일시적으로 입력이 발생하는 Input Action들

사용중인 3개의 Find 함수들은 위와 같다
TArray 멤버변수들에서 인자로 받은 GameplayTag를 검색하여
값이 있다면 해당 값을 반환하고, 없다면 nullptr를 반환한다
4) SOO_PlayerActionBase 클래스

일시적인 입력으로 발생하는 IA에 대한 행동을 정의하는 SOO_PlayerActionBase 클래스를 생성한다
멤버변수는 다음과 같다
- ActionTag 멤버변수 : 해당 행동을 실행하기 위한 Tag
- BlockedWhileActiveTags 멤버변수 : 해당 행동 실행 중에 막을 행동의 Tag
- bIsActive 멤버변수 : 해당 행동이 실행 중인지 여부

BlueprintNative 방식의 함수들에 대한 정의를 위와 같이 구성한다
TryActivate 함수를 호출하여 행동을 실행한다
Cancle 함수를 호출하여 행동을 중단한다
5) SOO_Action_Jump 클래스

점프 IA에 대한 행동을 의미하는 SOO_Action_Jump 클래스를 생성한다

TryActivate 함수를 위와 같이 오버라이드한다
캐릭터가 추락 중인지 확인하고 Jump 함수를 호출하여 캐릭터를 점프시킨다
이후 bIsActive 변수를 True로 설정하고 True 값을 반환한다

Cancel 함수를 위와 같이 오버라이드한다
StopJumping 함수를 호출하여 점프를 중단하고 bIsActive 변수를 False로 설정한다
6) SOO_ActionComponent 클래스

입력하여 발동된 IA의 행동에 대한 실행 + 중단을 처리하는 SOO_ActionComponent 클래스를 생성한다
멤버변수는 다음과 같다
- GrantedActionClasses 멤버변수 : IA 입력시에 실행할 행동의 Subclass 타입을 저장하는 TArray
- ActionMap 멤버변수 : Tag와 Subclass 타입 멤버변수로 생성한 인스턴스를 매핑하여 저장하는 TMap
- ActiveActionTags 멤버변수 : 현재 실행중인 행동의 Tag를 저장

생성자를 위와 같이 설정하여 ActorComponent의 불필요한 Tick을 비활성화한다

BeginPlay 함수를 위와 같이 구성하여 ActionMap 멤버변수의 값을 구성한다

TryActivateAction 함수를 위와 같이 구성한다
인자로 받은 Tag에 해당하는 IA의 행동을 가져와서 실행할 수 있는지 확인한 후에
TryActivate 함수를 호출하여 IA의 행동을 실행한다
실행이 되었다면 ActiveActionTags 변수에 인자로 받은 Tag를 저장하여 실행 중임을 기록한다

CancelAction 함수의 로직을 위와 같이 구성한다
인자로 받은 Tag에 해당하는 IA의 행동을 가져온 후에 Cancle 함수를 호출하여 IA의 행동을 중단한다
이후에 ActiveActionTags 멤버변수에서 인자를 받은 Tag를 제거한다

IsActionActive 함수의 로직을 위와 같이 구성한다
인자로 받은 Tag를 사용하여 저장된 IA의 행동이 유효하면서 실제로 존재하는지 여부를 반환한다

IsBlocked 함수의 로직을 위와 같이 구성한다
인자로 받은 IA의 행동의 실행을 막는 Tag를 지닌 IA의 행동이 실행 중인지 확인한다
7) SOO_PawnInputComponent 클래스

플레이어의 키 입력에 대한 콜백 함수를 제공하는 SOO_PawnInputComponent 클래스를 생성한다
멤버변수는 다음과 같이 구성하였다
- InputConfig 멤버변수 : 사용할 Input Action과 Tag를 매핑한 데이터 애셋
- DefaultMappingContext 멤버변수 : 사용할 Input Action과 입력키를 매핑한 컨텍스트

생성자를 위와 같이 구성하여 불필요한 Tick을 비활성화한다

AddDefaultMappingContext 함수를 위와 같이 구성하여 플레이어에게 기본 조작키 설정을 적용한다

SetupInputBindings 함수를 위와 같이 구성한다
매 프레임마다 발생하는 입력과 일시적으로 발생하는 입력에 대한 콜백 함수를 다르게 바인딩한다
전자는 Triggered 이벤트로 바인딩하여 키 입력이 완전히 이루어지면 콜백 함수를 호출하고
후자는 Started 이벤트로 바인딩하여 키 입력을 시작한 단 한순간에만 콜백 함수를 호출한다

Input_Move 콜백 함수의 로직은 위와 같이 구성한다
Yaw 값으로 만든 회전 행렬을 사용하여 플레이어의 방향을 설정하고 이동한다

Input_Look 콜백 함수의 로직은 위와 같다
키 입력 값을 바탕으로 PlayerController를 수평 - 수직으로 회전시킨다

Input_AbilityTriggered 콜백 함수의 로직은 위와 같다
플레이어에게 포함된 SOO_ActionComponent로부터 TryActivateAction 함수를 호출하여
인자로 넘겨준 Tag에 해당하는 IA의 행동을 실행한다
8) SOO_PlayerCharacter 클래스

플레이어 캐릭터 클래스에 위와 같이 멤버변수와 멤버함수를 추가한다
- ActionComponent 멤버변수 : IA의 행동을 실행 + 중단하는 컴포넌트
- PawnInputComponent 멤버변수 : IA의 실행에 대한 콜백함수를 제공하는 컴포넌트

생성자에 위와 같이 로직을 추가하여 추가한 컴포넌트 멤버변수들을 생성한다

PossessedBy 함수는 플레이어가 컨트롤러에 의해 조종되는 시점에서 서버 - 클라 양쪽에서 호출된다
해당 함수의 로직을 위와 같이 구성하여 기본 조작키 설정을 플레이어에게 적용한다

SetupPlayerInputComponent 함수는 InputComponent를 바인딩하는 시점에서 호출한다
해당 함수의 로직을 위와 같이 구성하여 키 입력에 따른 콜백 함수를 설정한다
'언리얼 엔진 - 게임 프로젝트 > 리슨 서버 기반 배틀 로얄' 카테고리의 다른 글
| 프로젝트 세팅 - 6) Lyra 기반의 애니메이션 설정 (2) (0) | 2026.09.19 |
|---|---|
| 프로젝트 세팅 - 5) Lyra 기반의 애니메이션 설정 (1) (0) | 2026.09.18 |
| 프로젝트 세팅 - 4) 플레이어의 움직임 설계 (0) | 2026.09.17 |
| 프로젝트 세팅 - 3) Lyra 기반의 입력 시스템 구성 (2) (0) | 2026.09.13 |
| 프로젝트 세팅 - 1) 필수 클래스 생성 (0) | 2026.09.11 |