Pawn, Character, Controller 이해
2장에서 객체 시스템과 게임 루프의 큰 틀을 잡았다면, 이제 실제 게임플레이의 중심 클래스로 내려와야 합니다.
이번 절에서는 APawn, ACharacter, AController를 집중적으로 다룹니다. 이 세 클래스는 플레이어와 AI의 움직임, 상호작용, 제어 책임을 어떻게 나눌지 결정하는 핵심 축입니다.
핵심 관계 흐름: AController가 Pawn을 Possess()해 제어하고, ACharacter는 Pawn을 확장해 이동/충돌/애니메이션 기능을 제공합니다.
APawn: 제어 가능한 월드 객체
APawn은 언리얼 엔진의 3D 월드에 존재하며 AController에 의해 빙의(Possess)되어 제어될 수 있는 AActor의 한 종류입니다. Pawn은 기본적으로 시각적인 표현이나 복잡한 이동 로직을 내장하고 있지 않습니다. 대신, AController로부터 명령을 받아 움직이거나 특정 행동을 수행하는 대리인 역할을 합니다.
-
주요 특징
- 제어 가능성:
APlayerController또는AAIController에 의해 빙의될 수 있습니다. 빙의되지 않은Pawn은 독립적으로 움직이지 않습니다. - 변환 정보:
AActor를 상속받으므로 월드 내에서 위치, 회전, 스케일 정보를 가집니다. - 컴포넌트 컨테이너:
APawn자체는 아무런 시각적 메시나 이동 로직을 가지지 않지만,UPROPERTY로 선언된 컴포넌트들을 추가하여 기능을 확장할 수 있습니다. 예를 들어,UStaticMeshComponent를 추가하여 시각적인 형태를 부여하고,UFloatingPawnMovement같은 컴포넌트를 붙여 이동 로직을 구현할 수 있습니다. - 입력 처리 위임:
APawn은 직접 플레이어 입력을 처리하기보다는, 빙의된AController로부터 명령을 받습니다. 하지만 필요하다면APawn자체적으로도 입력을 바인딩하고 처리할 수 있습니다.
- 제어 가능성:
-
언제
APawn을 사용할까요?- 사람 형태가 아닌 플레이어블 객체: 예를 들어, 차량, 비행기, 드론, 탱크 등 복잡한 이동 로직이 필요 없는 이동체를 구현할 때
APawn을 상속받아 사용합니다. - 간단한 AI 객체: 단순한 움직임이나 상호작용만을 수행하는 AI 객체에 적합합니다.
- 사람 형태가 아닌 플레이어블 객체: 예를 들어, 차량, 비행기, 드론, 탱크 등 복잡한 이동 로직이 필요 없는 이동체를 구현할 때
ACharacter: 플레이어를 위한 특화된 Pawn
ACharacter는 APawn을 상속받는 특화된 Pawn 클래스입니다.
사람 형태의 플레이어 캐릭터나 AI 캐릭터 구현에 맞춰 설계되어 있으며, APawn 기능 위에 이동/충돌/애니메이션 연동에 필요한 기본 컴포넌트를 제공합니다.
-
주요 특징
UCapsuleComponent(Root Component):ACharacter의 루트 컴포넌트로 자동으로 포함됩니다. 캐릭터의 충돌 영역을 캡슐 형태로 정의하며, 정확한 충돌 감지 및 물리 상호작용에 사용됩니다.USkeletalMeshComponent: 캐릭터의 스켈레탈 메시(애니메이션 가능한 3D 모델)를 표현하는 컴포넌트입니다. 캐릭터의 시각적인 부분을 담당하며, 애니메이션 블루프린트와 연동되어 복잡한 애니메이션을 구현합니다.UCharacterMovementComponent:ACharacter의 핵심 컴포넌트입니다. 중력, 점프, 걷기, 달리기, 웅크리기, 낙하 같은 이동 로직을 기본 구현하고 있어 설정 조정과 함수 호출만으로 다양한 움직임을 만들 수 있습니다. 네트워크 멀티플레이어 동기화까지 고려되어 있다는 점도 큰 장점입니다.- 네트워크 복제 최적화:
ACharacter는 네트워크 환경에서 이동 및 상태 복제에 최적화되어 있습니다.
-
언제
ACharacter를 사용할까요?- 대부분의 플레이어블 캐릭터: FPS/TPS 게임의 주인공, RPG 게임의 캐릭터 등 사람 형태의 복잡한 움직임이 필요한 경우에 사용합니다.
- 사람 형태의 AI 캐릭터: NPC, 몬스터 등
UCharacterMovementComponent의 이동 로직이 필요한 AI 캐릭터에 사용합니다.
AController: Pawn을 제어하는 두뇌
AController는 APawn 또는 ACharacter를 빙의(Possess)해 제어하는 클래스입니다.
AController 자체는 월드에 보이지 않으며, Pawn/Character가 몸이라면 Controller는 그 몸을 움직이는 두뇌 역할을 합니다. 이 클래스는 크게 두 가지 파생 타입으로 나뉩니다.
APlayerController: 플레이어의 두뇌
-
역할: 사용자(플레이어)의 입력(키보드, 마우스, 게임패드 등)을 받아
Pawn이나Character를 제어하고, 게임 월드와 상호작용하는 역할을 합니다. 또한 플레이어의 HUD(Head-Up Display) 표시, 인벤토리 관리, 설정 저장/로드 등 플레이어 고유의 전반적인 관리도 담당합니다. -
특징
- 각 플레이어마다 하나씩 존재: 멀티플레이어 게임에서는 접속한 각 플레이어마다 자신만의
APlayerController인스턴스를 가집니다. - 서버와 클라이언트 모두에 존재:
APlayerController는 서버와 해당 클라이언트 모두에 복제되어 존재하며, 입력 처리와 명령 전달을 담당합니다. - UI 상호작용: UI 위젯을 생성하고 관리하며, 마우스 커서 표시 등을 제어할 수 있습니다.
Possess()및UnPossess()함수:APlayerController는Possess(APawn* InPawn)함수를 통해 특정Pawn에 빙의하여 제어를 시작하고,UnPossess()를 통해 제어를 해제할 수 있습니다.
- 각 플레이어마다 하나씩 존재: 멀티플레이어 게임에서는 접속한 각 플레이어마다 자신만의
-
언제
APlayerController를 사용할까요?- 플레이어의 입력 처리 및 캐릭터 조작.
- 플레이어 인벤토리, 스킬, 능력치 등 플레이어 고유의 데이터 관리.
- 플레이어에게 보여지는 UI(HUD, 메뉴 등) 관리.
- 클라이언트와 서버 간의 RPC(Remote Procedure Call) 통신 시작점.
AAIController: AI의 두뇌
-
역할: AI(인공지능)의 로직을 처리하고, 해당 AI가 조종하는
Pawn이나Character를 제어하는 클래스입니다. 플레이어가 아닌 컴퓨터가 제어하는 모든Pawn또는Character는AAIController에 의해 제어됩니다. -
특징
- 행동 트리(Behavior Tree) 및 블랙보드(Blackboard) 연동: 언리얼 엔진의 강력한 AI 시스템인 행동 트리와 블랙보드를 사용하여 복잡한 AI 로직을 구축하는 데 핵심적인 역할을 합니다.
- 지각 컴포넌트(Perception Component):
UAIPerceptionComponent와 같은 컴포넌트를 사용하여 환경을 인지(시각, 청각 등)하고, 인지된 정보를 바탕으로 행동을 결정합니다. - 내비게이션(Navigation) 및 경로 탐색: 내비게이션 메시를 이용하여 캐릭터가 이동할 수 있는 경로를 탐색하고 이동 명령을
Pawn에게 전달합니다.
-
언제
AAIController를 사용할까요?- 게임 내의 적, NPC, 아군 AI 등 컴퓨터가 제어하는 모든 캐릭터의 행동 로직을 구현할 때.
Pawn, Character, Controller의 관계 요약
이 세 클래스의 관계는 마치 뇌(Controller)가 몸(Pawn/Character)을 움직인다는 비유로 설명할 수 있습니다.
- Controller: 뇌에 해당합니다. 입력(플레이어) 또는 AI 로직(AI)을 처리하고, 몸에게 어떤 행동을 할지 명령합니다. Controller는 월드에 시각적으로 존재하지 않습니다.
- Pawn / Character: 몸에 해당합니다. Controller의 명령을 받아 3D 월드에서 움직이고 시각적으로 표현됩니다. Character는 Pawn의 특화된 형태로, 특히 사람 형태의 복잡한 움직임에 적합한 기능을 내장하고 있습니다.
하나의 Pawn은 동시에 하나의 Controller에 의해서만 빙의될 수 있습니다. Controller는 Pawn을 Possess()하고 UnPossess()함으로써 제어권을 얻거나 포기할 수 있습니다.
아래 의사결정 다이어그램은 제어 주체(플레이어/AI)와 이동 요구사항(사람형 이동/네트워크 보정 여부)에 따라 Controller와 Pawn 타입을 고르는 기준을 한 번에 정리합니다.
핵심 체크포인트: 사람형 이동, 점프, 복제 보정이 필요하면 ACharacter를 우선 검토하고, 단순 이동체라면 APawn + 전용 이동 컴포넌트 구성을 먼저 고려합니다.
실제 게임에서의 예시
-
FPS 게임 플레이어
ACharacter: 플레이어가 직접 조종하는 캐릭터 (시각적인 모델, 움직임).APlayerController: 마우스/키보드 입력을 받아ACharacter를 움직이고 총을 발사하는 등 제어. HUD 표시.
-
NPC 적
ACharacter: 적 NPC의 시각적인 모델과 움직임.AAIController: 플레이어를 추적하거나 공격하는 AI 로직을 수행하고,ACharacter에게 이동 및 공격 명령을 내림.
-
차량 시뮬레이션
APawn: 차량의 물리 모델과 시각적인 메시.APlayerController: 키보드/게임패드 입력을 받아APawn(차량)을 조작.
이제 APawn, ACharacter, AController 이 세 가지 핵심 클래스의 역할과 차이점을 명확히 이해하셨을 것입니다. 이 지식은 언리얼 엔진에서 플레이어와 AI의 움직임을 구현하고 제어하는 데 있어 가장 기본적인 출발점이 됩니다.