Pawn, Character, Controller 이해
2장에서 언리얼 엔진의 핵심 객체 시스템과 게임 루프를 구성하는 주요 클래스들에 대해 깊이 있게 살펴보았습니다. 이제 그 지식을 바탕으로, 실제 게임플레이를 구현하는 데 가장 필수적인 세 가지 클래스인 APawn
, ACharacter
, 그리고 AController
에 대해 더욱 자세히 알아보겠습니다. 이 세 클래스는 언리얼 엔진에서 플레이어와 AI의 움직임, 상호작용, 그리고 그 제어를 담당하는 핵심적인 역할을 수행합니다.
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
클래스입니다. 이름에서 알 수 있듯이, ACharacter
는 주로 사람 형태의 플레이어블 캐릭터나 AI 캐릭터를 구현하는 데 특화되어 있습니다. ACharacter
는 APawn
의 모든 기능을 포함하며, 캐릭터의 움직임과 관련된 복잡한 로직을 손쉽게 구현할 수 있도록 몇 가지 강력한 내장 컴포넌트를 제공합니다.
-
주요 특징
UCapsuleComponent
(Root Component):ACharacter
의 루트 컴포넌트로 자동으로 포함됩니다. 캐릭터의 충돌 영역을 캡슐 형태로 정의하며, 정확한 충돌 감지 및 물리 상호작용에 사용됩니다.USkeletalMeshComponent
: 캐릭터의 스켈레탈 메시(애니메이션 가능한 3D 모델)를 표현하는 컴포넌트입니다. 캐릭터의 시각적인 부분을 담당하며, 애니메이션 블루프린트와 연동되어 복잡한 애니메이션을 구현합니다.UCharacterMovementComponent
:ACharacter
의 가장 핵심적인 컴포넌트입니다. 중력, 점프, 걷기, 달리기, 웅크리기, 공중 부양, 낙하 등 사람 형태의 캐릭터가 수행할 수 있는 모든 복잡한 이동 로직을 이미 구현해 놓았습니다. 이 컴포넌트의 설정을 조작하고 함수를 호출하는 것만으로 다양한 캐릭터 이동을 손쉽게 구현할 수 있습니다. 네트워크 멀티플레이어 환경에서도 완벽하게 동기화되도록 설계되어 있습니다.- 네트워크 복제 최적화:
ACharacter
는 네트워크 환경에서 이동 및 상태 복제에 최적화되어 있습니다.
-
언제
ACharacter
를 사용할까요?- 대부분의 플레이어블 캐릭터: FPS/TPS 게임의 주인공, RPG 게임의 캐릭터 등 사람 형태의 복잡한 움직임이 필요한 경우에 사용합니다.
- 사람 형태의 AI 캐릭터: NPC, 몬스터 등
UCharacterMovementComponent
의 이동 로직이 필요한 AI 캐릭터에 사용합니다.
AController: Pawn을 제어하는 두뇌
AController
는 APawn
또는 ACharacter
를 '빙의'하여 제어하는 역할을 담당하는 클래스입니다. AController
자체는 월드에 시각적으로 존재하지 않으며, Pawn
이나 Character
가 '몸'이라면 Controller
는 그 '몸'을 움직이는 '두뇌'에 해당합니다. AController
는 두 가지 주요 파생 클래스로 나뉩니다.
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()
함으로써 제어권을 얻거나 포기할 수 있습니다.
실제 게임에서의 예시
- FPS 게임 플레이어
ACharacter
: 플레이어가 직접 조종하는 캐릭터 (시각적인 모델, 움직임).APlayerController
: 마우스/키보드 입력을 받아ACharacter
를 움직이고 총을 발사하는 등 제어. HUD 표시.
- NPC 적
ACharacter
: 적 NPC의 시각적인 모델과 움직임.AAIController
: 플레이어를 추적하거나 공격하는 AI 로직을 수행하고,ACharacter
에게 이동 및 공격 명령을 내림.
- 차량 시뮬레이션
APawn
: 차량의 물리 모델과 시각적인 메시.APlayerController
: 키보드/게임패드 입력을 받아APawn
(차량)을 조작.
이제 APawn
, ACharacter
, AController
이 세 가지 핵심 클래스의 역할과 차이점을 명확히 이해하셨을 것입니다. 이 지식은 언리얼 엔진에서 플레이어와 AI의 움직임을 구현하고 제어하는 데 있어 가장 기본적인 출발점이 됩니다.