플레이어 컨트롤러, 폰 블루프린트
PlayerController와 Pawn·Character의 책임을 구분하고 입력·빙의·이동·카메라가 이어지는 흐름을 이해합니다.
지난 절에서 GameMode, GameState, PlayerState로 게임 규칙과 전역 상태를 정리했다면, 이제 플레이어 조작 흐름으로 들어가야 합니다.
이번 절의 중심은 플레이어 컨트롤러(Player Controller)와 폰(Pawn) 블루프린트입니다.
입력이 어디서 받아들여지고, 어떤 경로로 캐릭터 움직임으로 이어지는지 이해하면 게임플레이 구조를 훨씬 명확하게 설계할 수 있습니다.
플레이어 컨트롤러 (Player Controller)
플레이어 컨트롤러 (Player Controller)는 플레이어 입력(마우스, 키보드, 게임패드 등)을 받아 폰(Pawn)을 제어하고, UI/카메라 같은 플레이어 전용 기능을 담당하는 클래스입니다.
서버는 각 플레이어의 PlayerController를 가지며, 각 클라이언트에는 자신이 소유한 PlayerController가 있습니다. 다른 플레이어의 PlayerController가 모든 클라이언트에 복제되는 구조는 아닙니다.
주요 역할- 입력 처리: 마우스 클릭, 키보드 입력, 게임패드 입력 등 입력을 처리할 수 있습니다. 입력 바인딩은 Pawn/Character에도 둘 수 있으므로 책임을 정해 분리합니다.
- 폰(Pawn) 제어: 플레이어가 빙의(Possess)할 폰을 선택하고, 해당 폰에게 이동, 공격 등의 명령을 내립니다. 플레이어가 사망하여 새로운 폰으로 재스폰될 때도 플레이어 컨트롤러는 유지됩니다.
- 카메라 제어: 플레이어 시점의 카메라(Camera)를 제어하고 관리합니다.
- UI 상호작용: UI 위젯을 화면에 띄우고, 마우스 커서를 표시하거나 숨기며, UI와의 상호작용(버튼 클릭 등)을 처리합니다.
- 네트워크 통신 (멀티플레이어): 플레이어의 입력을 서버로 전송하고, 서버의 게임 상태 업데이트를 받아 클라이언트에 반영합니다.
- HUD 관리: 플레이어에게 정보를 표시하는 HUD(Heads-Up Display)를 생성하고 관리합니다. (다음 절에서 다룸)
새 블루프린트 클래스 생성: 콘텐츠 브라우저에서 마우스 오른쪽 버튼 클릭 > 블루프린트 클래스(Blueprint Class) > PlayerController를 부모 클래스로 선택합니다.
- 이름을 지정합니다. (예:
PC_MyPlayer)
게임 모드에 플레이어 컨트롤러 연결:
- 여러분의 게임 모드 블루프린트(
GM_MyGame)를 엽니다. 클래스 디폴트(Class Defaults)를 클릭하고디테일(Details)패널에서클래스(Classes)섹션을 찾습니다.Player Controller Class드롭다운에서PC_MyPlayer를 선택합니다.
PC_MyPlayer 블루프린트를 열고 이벤트 그래프에서 입력을 처리할 수 있습니다.
- 입력 액션 이벤트에서
Get Controlled Pawn으로 이 컨트롤러가 빙의한 폰을 가져옵니다. 유효성을 확인하고Character로 캐스트한 뒤Jump를 호출합니다. 일반Pawn에는Jump가 없습니다. Get Player Pawn은 플레이어 인덱스로 조회합니다. 특정 컨트롤러 자신의 폰이 필요할 때는 위 참조를 사용합니다. Enhanced Input을 사용한다면 해당 입력 매핑도 먼저 등록합니다.
폰 (Pawn)과 캐릭터 (Character) 블루프린트
폰 (Pawn)은 컨트롤러가 빙의할 수 있는 Actor입니다. 모든 월드 오브젝트가 Pawn인 것은 아니며, 반드시 보이는 메시나 물리 시뮬레이션을 가질 필요도 없습니다.
폰은 AI 컨트롤러나 플레이어 컨트롤러에 의해 빙의(Possess) 될 수 있습니다.
폰에도 입력 처리 로직을 둘 수 있습니다. 이 예제에서는 PlayerController가 입력 의도를 해석하고 Pawn이 월드 행동을 수행하도록 나눕니다.
폰의 역할- 월드 내 존재: 필요에 따라 메시, 콜리전, 이동 컴포넌트를 구성합니다.
- 이동 및 상호작용: 컨트롤러로부터 명령을 받아 이동하고, 다른 오브젝트와 상호작용합니다.
- 빙의 가능: 플레이어 또는 AI에 의해 제어될 수 있습니다.
캐릭터 (Character): 캐릭터 (Character)는 언리얼 엔진에서 가장 많이 쓰이는 폰의 특수화 하위 클래스입니다.
사람이나 동물처럼 이족 보행 캐릭터에 최적화되어 있고, 걷기, 달리기, 점프, 낙하를 처리하는 CharacterMovementComponent를 기본으로 포함합니다.
그래서 대부분의 플레이어 캐릭터와 AI NPC가 Character를 부모 클래스로 사용합니다.
CharacterMovementComponent: 걷기, 달리기, 점프, 낙하와 그 이동에 필요한 네트워크 기능을 제공합니다. 임의의 공격·인벤토리 로직까지 자동 복제하지는 않습니다.- 스켈레탈 메시: 애니메이션을 재생할 수 있는 스켈레탈 메시 컴포넌트를 기본으로 포함합니다.
- 캡슐 콜리전: 캐릭터의 몸통을 감싸는 캡슐 형태의 콜리전을 기본으로 제공합니다.
새 블루프린트 클래스 생성: 콘텐츠 브라우저에서 마우스 오른쪽 버튼 클릭 > 블루프린트 클래스(Blueprint Class) > Pawn 또는 Character를 부모 클래스로 선택합니다.
Pawn: 비행체, 자동차, 고정된 카메라 등CharacterMovementComponent의 복잡한 이동 로직이 필요 없는 경우에 사용합니다.Character: 사람 형태의 플레이어 캐릭터나 AI NPC에 가장 적합합니다.- 이름을 지정합니다. (예:
BP_MyPlayerCharacter또는BP_EnemyCharacter)
- 여러분의 게임 모드 블루프린트(
GM_MyGame)를 엽니다. 클래스 디폴트(Class Defaults)를 클릭하고디테일(Details)패널에서클래스(Classes)섹션을 찾습니다.Default Pawn Class드롭다운에서BP_MyPlayerCharacter를 선택합니다.- 참고: AI 캐릭터의 경우, 해당 AI 캐릭터 블루프린트의
디테일패널에서폰(Pawn)섹션의AI Controller Class를 설정합니다. (8장 AI 시스템 구축 참조)
플레이어 컨트롤러와 폰의 상호작용
플레이어 컨트롤러와 폰은 Possess 및 UnPossess 과정을 통해 상호작용합니다.
Possess: 플레이어 컨트롤러가 특정 폰을 빙의하여 제어권을 얻는 과정입니다. 기본 게임 모드의 플레이어 시작 흐름은 지정된 폰을 스폰하고 빙의합니다. 네트워크 게임의Possess는 서버 권한에서 수행하며, 사망 뒤 재스폰은RestartPlayer같은 게임 모드 흐름을 별도로 호출하도록 구현합니다.UnPossess: 플레이어 컨트롤러가 현재 제어하던 폰의 제어권을 놓는 과정입니다.
게임 시작: GM_MyGame이 BP_MyPlayerCharacter를 스폰하고, PC_MyPlayer가 이 폰을 Possess합니다.
플레이어 입력: 플레이어가 키보드 입력을 하면, PC_MyPlayer가 이 입력을 받아 BP_MyPlayerCharacter의 CharacterMovementComponent에 이동 명령을 내립니다.
플레이어 사망: BP_MyPlayerCharacter가 파괴되지만, PC_MyPlayer는 계속 존재합니다.
재스폰: GM_MyGame이 새로운 BP_MyPlayerCharacter를 스폰하고, 기존의 PC_MyPlayer가 이 새로운 폰을 다시 Possess합니다.
플레이어의 점수나 스탯을 관리하는 PS_MyPlayer는 이 과정에서도 유지되므로, 재스폰 후에도 점수가 초기화되지 않습니다.
핵심 개념 정리
| 클래스 | 역할과 수명 |
|---|---|
| PlayerController | 입력·UI·카메라를 관리합니다. 서버와 소유 클라이언트에 존재하며, 폰을 교체해도 유지할 수 있습니다. |
| Pawn | 빙의 가능한 월드 Actor입니다. 자체 입력 처리도 가능하며, 재스폰 설계에서는 새 인스턴스로 교체합니다. |
| Character | Pawn의 하위 클래스입니다. 캡슐·스켈레탈 메시와 CharacterMovementComponent를 포함합니다. |
이처럼 언리얼 엔진의 게임플레이 프레임워크는 각 클래스에 명확한 역할을 부여하여, 게임 로직을 체계적으로 분리하고 관리할 수 있도록 돕습니다.
이는 특히 멀티플레이어 환경에서 네트워크 복제 및 동기화를 효율적으로 처리하는 데 필수적입니다.
이번 절에서는 플레이어의 입력과 캐릭터의 움직임을 담당하는 플레이어 컨트롤러와 폰/캐릭터 블루프린트의 역할과 기본적인 설정 방법에 대해 알아보았습니다.
이들은 플레이어와 게임 세계 간의 직접적인 상호작용을 구현하는 데 핵심적인 요소입니다.