배운 내용
- PlayerController 이해하기
- PlayerController란?
- PlayerController는 플레이어 입력(키보드, 마우스, 게임패드)을 받아 해석하고, 이를 캐릭터나 오브젝트의 동작으로 변환하는 핵심 클래스.
- 입력 로직과 캐릭터 동작 로직을 분리해 코드 관리를 용이하게 함.
- 입력 흐름:
- 입력 장치 → PlayerController가 해석.
- PlayerController가 소유한 Pawn에 동작 명령 전달.
- 멀티플레이에서는 각 플레이어가 고유한 PlayerController를 가져 입력이 충돌하지 않음.
- PlayerController의 주요 기능
- 입력 처리: 다양한 입력 장치 이벤트를 처리하며,
SetupInputComponent()를 활용.
- 카메라 제어: 시점 회전, 줌 동작.
- HUD/UI와 상호작용: 버튼 클릭, 스킬 발동 등.
- Possess/UnPossess: PlayerController가 Pawn을 소유하거나 소유 해제.
- PlayerController C++ 클래스 생성
- PlayerController 클래스 생성
- 언리얼 에디터에서 PlayerController 클래스를 상속받아
SpartaPlayerController 생성.
- C++ 클래스에서 입력 로직과 관련된 멤버 변수를 선언.
UCLASS()
class SPARTAPROJECT_API ASpartaPlayerController : public APlayerController
{
GENERATED_BODY()
};
- GameMode에 PlayerController 적용
PlayerControllerClass를 새로 만든 SpartaPlayerController로 설정해 게임에서 적용.
- Enhanced Input System의 이해
- Enhanced Input System란?
- 입력 설정을 전역
Input 대신 Input Mapping Context (IMC)와 Input Action (IA)으로 관리.
- 상황에 따라 입력 모드를 동적으로 변경 가능.
- Input Action 생성
- 특정 동작(이동, 점프, 카메라 회전 등)을 정의.
- Value Type으로 Bool, Axis1D, Axis2D 등을 선택.
- Trigger로 Pressed, Released 설정 가능.
- Input Mapping Context 설정
- 여러 Input Actions를 모아 매핑 관리.
- 키보드와 마우스 입력을 IA에 매핑하고, 필요 시 Modifier(입력 값 반전, 배율 조정) 설정.
- PlayerController에서 IMC 활성화
- Local Player Subsystem 활용
UEnhancedInputLocalPlayerSubsystem을 통해 IMC를 활성화.
- 코드 예시 :
void ASpartaPlayerController::BeginPlay()
{
Super::BeginPlay();
if (ULocalPlayer* LocalPlayer = GetLocalPlayer())
{
if (UEnhancedInputLocalPlayerSubsystem* Subsystem = LocalPlayer->GetSubsystem<UEnhancedInputLocalPlayerSubsystem>())
{
if (InputMappingContext)
{
Subsystem->AddMappingContext(InputMappingContext, 0);
}
}
}
}
-
IMC 활성화 확인
- IA 이벤트를 Blueprint로 연결해 테스트.
- 입력 동작이 정상적으로 작동하는지 Print String 등을 활용해 확인 가능.
배운 점
-
PlayerController는 입력 처리와 캐릭터 동작을 분리하며 게임 로직의 중심을 담당.
-
Enhanced Input System은 기존 입력 방식보다 구조적이고 확장 가능성이 높음.
-
C++과 Blueprint를 적절히 조합해 입력을 효율적으로 관리할 수 있음.