1. PlayerController란?
- PlayerController는 사용자가 키보드, 마우스, 게임 패드 등에서 입력을 받으면, 그 입력을 해석하여 캐릭터나 다른 오브젝트에게 동작을 명령하는 핵심 클래스이다.
- 특히 멀티플레이 환경에서는, 각 플레이어마다 개별 PlayerController가 생성되므로, 여러 사용자의 입력을 충돌 없이 분리하고 관리할 수 있다.
언리얼 엔진의 중요한 철학 중 하나는 "플레이어 입력은 PlayerController에서 처리한다."이다.
이를 통해 입력 처리 로직과 실제 캐릭터의 동작 로직을 분리할 수 있어, 코드를 구조적으로 관리하기가 훨씬 수월해진다.
1-1. 입력이 처리되는 기본 흐름
- 키보드, 마우스, 게임 패드 등 입력 장치로부터 사용자 조작 신호가 들어온다.
- 이 신호는 PlayerController가 받아서 해석한다.
- PlayerController가 현재 소유(Possess)하고 있는 Pawn에게 이동, 회전, 공격 등의 구체적인 명령을 내린다.
2. PlayerController의 주요 기능
입력 처리
- 키보드, 마우스, 게임 패드, 터치 등 다양한 입력 장치의 이벤트를 처리한다.
- UE5에서 제공하는 Enhanced Input 시스템을 사용하면, 액션/축 매핑을 보다 체계적으로 설정할 수 있다.
- C++에서는 SetupInputComponent()함수를 오버라이드하여, 블루프린트에서는 이벤트 그래프를 통해 입력 로직을 구현한다.
카메라 제어 로직
- 마우스나 게임 패드의 축 입력을 받아 캐릭터의 시점 회전이나 줌 인/아웃 같은 카메라 동작을 수행할 수 있다.
HUD 및 UI와의 상호작용
- 언리얼의 UMG(언리얼 모션 그래픽) 기반 UI를 통해 버튼 클릭, 드래그, 터치 등의 이벤트를 PlayerController에서 받을 수 있다.
- 예를 들어 인벤토리 열기, 스킬 사용 등의 명령을 UI에서 트리거하면 PlayerController가 이를 해석해 Pawn 또는 GameMode 등 다른 시스템으로 전달할 수 있다.
Possess / UnPossess
- PlayerController는 특정 Pawn에 빙의하여 해당 Pawn을 제어한다.
- 필요할 때 UnPossess() 함수를 호출하여 Pawn과의 연결을 해제한 뒤, 다른 Pawn으로 바꿔 탈 수도 있다.
- 멀티 플레이 시 각 플레이어마다 고유의 PlayerController가 있고, 이 컨트롤러가 특정 Pawn을 소유함으로써 서로 다른 캐릭터 조작이 가능하다.
3. PlayerController 생성해 보기
Tools > New C++ Class > PlayerController 클래스를 선택해 생성하면 된다.
4. PlayerController를 GameMode에 적용하기
- PlayerController가 게임에서 실제로 사용되려면, GameMode에 등록해야 한다.
- GameMode는 "어떤 PlayerController, 어떤 Pawn을 사용할 것인가?"를 결정하는 역할을 담당하므로, GameMode 클래스의 코드를 수정한다.
코드 설명
- PlayerControllerClass는 GameMode가 제공하는 속성으로, 게임 시작 시 사용할 PlayerController 타입을 지정한다.
- APawnPlayerController::StaticClass()는 언리얼 엔진이 APawnPlayerController 클래스의 정보를 런타임에 참조할 수 있도록 제공하는 정적 함수이다.
- 위 코드를 저장 후 프로젝트 빌드를 완료하면, 언리얼 에디터에서 GameMode가 PawnPlayerController를 기본 PlayerController로 인식하게 된다.
- 이 클래스를 더 손쉽게 편집할 수 있도록 블루프린트로 래핑하는 과정을 거칠 수 있다.
5. PlayerController 동작 확인
GameMode에서 PlayerController 클래스를 적용한 뒤, Play 버튼을 눌러 게임을 실행한다.
이렇게 GameMode에 PlayerController클래스를 지정하면, 게임 시작 시 해당 PlayerController가 자동으로 스폰되어 플레이어 입력을 처리한다.
'Unreal' 카테고리의 다른 글
액션 바인딩 추가 및 캐릭터 동작 구현 (0) | 2025.02.12 |
---|---|
Enhanced Input System의 이해 및 Input Action 설정하기 (0) | 2025.02.12 |
Pawn과 Character 클래스 이해하기 (0) | 2025.02.06 |
GameMode 이해하기 (0) | 2025.02.06 |
[7강 숙제] 멤버 변수 및 멤버 함수 리플렉션 시스템 사용하기 (0) | 2025.01.23 |