icon

안동민 개발노트

3장 : 게임플레이 프로그래밍

Pawn, Character, Controller 이해


2장에서 객체 시스템과 게임 루프의 큰 틀을 잡았다면, 이제 실제 게임플레이의 중심 클래스로 내려와야 합니다.

이번 절에서는 APawn, ACharacter, AController를 집중적으로 다룹니다. 이 세 클래스는 플레이어와 AI의 움직임, 상호작용, 제어 책임을 어떻게 나눌지 결정하는 핵심 축입니다.

핵심 관계 흐름: AControllerPawnPossess()해 제어하고, ACharacterPawn을 확장해 이동/충돌/애니메이션 기능을 제공합니다.


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

ACharacterAPawn을 상속받는 특화된 Pawn 클래스입니다.

사람 형태의 플레이어 캐릭터나 AI 캐릭터 구현에 맞춰 설계되어 있으며, APawn 기능 위에 이동/충돌/애니메이션 연동에 필요한 기본 컴포넌트를 제공합니다.

  • 주요 특징
    • UCapsuleComponent (Root Component): ACharacter의 루트 컴포넌트로 자동으로 포함됩니다. 캐릭터의 충돌 영역을 캡슐 형태로 정의하며, 정확한 충돌 감지 및 물리 상호작용에 사용됩니다.
    • USkeletalMeshComponent: 캐릭터의 스켈레탈 메시(애니메이션 가능한 3D 모델)를 표현하는 컴포넌트입니다. 캐릭터의 시각적인 부분을 담당하며, 애니메이션 블루프린트와 연동되어 복잡한 애니메이션을 구현합니다.
    • UCharacterMovementComponent: ACharacter의 핵심 컴포넌트입니다. 중력, 점프, 걷기, 달리기, 웅크리기, 낙하 같은 이동 로직을 기본 구현하고 있어 설정 조정과 함수 호출만으로 다양한 움직임을 만들 수 있습니다. 네트워크 멀티플레이어 동기화까지 고려되어 있다는 점도 큰 장점입니다.
    • 네트워크 복제 최적화: ACharacter는 네트워크 환경에서 이동 및 상태 복제에 최적화되어 있습니다.
  • 언제 ACharacter를 사용할까요?
    • 대부분의 플레이어블 캐릭터: FPS/TPS 게임의 주인공, RPG 게임의 캐릭터 등 사람 형태의 복잡한 움직임이 필요한 경우에 사용합니다.
    • 사람 형태의 AI 캐릭터: NPC, 몬스터 등 UCharacterMovementComponent의 이동 로직이 필요한 AI 캐릭터에 사용합니다.

AController: Pawn을 제어하는 두뇌

AControllerAPawn 또는 ACharacter를 빙의(Possess)해 제어하는 클래스입니다.

AController 자체는 월드에 보이지 않으며, Pawn/Character가 몸이라면 Controller는 그 몸을 움직이는 두뇌 역할을 합니다. 이 클래스는 크게 두 가지 파생 타입으로 나뉩니다.

APlayerController: 플레이어의 두뇌

  • 역할: 사용자(플레이어)의 입력(키보드, 마우스, 게임패드 등)을 받아 Pawn이나 Character를 제어하고, 게임 월드와 상호작용하는 역할을 합니다. 또한 플레이어의 HUD(Head-Up Display) 표시, 인벤토리 관리, 설정 저장/로드 등 플레이어 고유의 전반적인 관리도 담당합니다.

  • 특징
    • 각 플레이어마다 하나씩 존재: 멀티플레이어 게임에서는 접속한 각 플레이어마다 자신만의 APlayerController 인스턴스를 가집니다.
    • 서버와 클라이언트 모두에 존재: APlayerController는 서버와 해당 클라이언트 모두에 복제되어 존재하며, 입력 처리와 명령 전달을 담당합니다.
    • UI 상호작용: UI 위젯을 생성하고 관리하며, 마우스 커서 표시 등을 제어할 수 있습니다.
    • Possess()UnPossess() 함수: APlayerControllerPossess(APawn* InPawn) 함수를 통해 특정 Pawn에 빙의하여 제어를 시작하고, UnPossess()를 통해 제어를 해제할 수 있습니다.
  • 언제 APlayerController를 사용할까요?
    • 플레이어의 입력 처리 및 캐릭터 조작.
    • 플레이어 인벤토리, 스킬, 능력치 등 플레이어 고유의 데이터 관리.
    • 플레이어에게 보여지는 UI(HUD, 메뉴 등) 관리.
    • 클라이언트와 서버 간의 RPC(Remote Procedure Call) 통신 시작점.

AAIController: AI의 두뇌

  • 역할: AI(인공지능)의 로직을 처리하고, 해당 AI가 조종하는 Pawn이나 Character를 제어하는 클래스입니다. 플레이어가 아닌 컴퓨터가 제어하는 모든 Pawn 또는 CharacterAAIController에 의해 제어됩니다.

  • 특징
    • 행동 트리(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에 의해서만 빙의될 수 있습니다. ControllerPawnPossess()하고 UnPossess()함으로써 제어권을 얻거나 포기할 수 있습니다.

아래 의사결정 다이어그램은 제어 주체(플레이어/AI)와 이동 요구사항(사람형 이동/네트워크 보정 여부)에 따라 ControllerPawn 타입을 고르는 기준을 한 번에 정리합니다.

핵심 체크포인트: 사람형 이동, 점프, 복제 보정이 필요하면 ACharacter를 우선 검토하고, 단순 이동체라면 APawn + 전용 이동 컴포넌트 구성을 먼저 고려합니다.


실제 게임에서의 예시

  • FPS 게임 플레이어
    • ACharacter: 플레이어가 직접 조종하는 캐릭터 (시각적인 모델, 움직임).
    • APlayerController: 마우스/키보드 입력을 받아 ACharacter를 움직이고 총을 발사하는 등 제어. HUD 표시.
  • NPC 적
    • ACharacter: 적 NPC의 시각적인 모델과 움직임.
    • AAIController: 플레이어를 추적하거나 공격하는 AI 로직을 수행하고, ACharacter에게 이동 및 공격 명령을 내림.
  • 차량 시뮬레이션
    • APawn: 차량의 물리 모델과 시각적인 메시.
    • APlayerController: 키보드/게임패드 입력을 받아 APawn (차량)을 조작.

이제 APawn, ACharacter, AController 이 세 가지 핵심 클래스의 역할과 차이점을 명확히 이해하셨을 것입니다. 이 지식은 언리얼 엔진에서 플레이어와 AI의 움직임을 구현하고 제어하는 데 있어 가장 기본적인 출발점이 됩니다.

목차