icon
9장 : 게임플레이 프레임워크

플레이어 컨트롤러, 폰 블루프린트


지난 절에서는 게임의 규칙과 전역 상태를 관리하는 게임 모드, 게임 스테이트, 플레이어 스테이트에 대해 알아보았습니다. 이제 플레이어가 직접 조작하는 캐릭터와 그 조작을 담당하는 컨트롤러에 대해 깊이 있게 다룰 차례입니다. 언리얼 엔진의 게임플레이 프레임워크에서 플레이어의 입력과 캐릭터의 움직임을 담당하는 핵심 요소는 바로 플레이어 컨트롤러(Player Controller)폰(Pawn) 블루프린트입니다.


플레이어 컨트롤러 (Player Controller)

플레이어 컨트롤러 (Player Controller)플레이어의 입력(마우스, 키보드, 게임패드 등)을 받아서 게임 월드 내의 폰(Pawn)을 제어하고, 플레이어에게 특화된 기능(UI 조작, 카메라 제어 등)을 담당하는 클래스입니다. 각 플레이어는 자신만의 플레이어 컨트롤러를 가집니다. 멀티플레이어 게임에서는 클라이언트에서 입력된 명령을 서버로 보내고, 서버에서 받은 게임 상태 업데이트를 클라이언트에 반영하는 역할도 수행합니다.

주요 역할

  • 입력 처리: 마우스 클릭, 키보드 입력, 게임패드 입력 등 플레이어의 모든 입력을 받아 처리합니다.
  • 폰(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 블루프린트를 열고 이벤트 그래프에서 입력을 처리할 수 있습니다.

  • Input Action 또는 Input Axis 이벤트를 생성하고 여기에 로직을 연결합니다. 예를 들어, Input Action Jump 이벤트가 발생하면, 현재 플레이어가 빙의(Possess)하고 있는 폰을 가져와 Jump 함수를 호출하는 식입니다.
  • Get Player Pawn 노드를 사용하여 현재 컨트롤하는 폰의 참조를 얻을 수 있습니다.

폰 (Pawn)과 캐릭터 (Character) 블루프린트

폰 (Pawn)게임 월드 내에서 '물리적인 존재'로서 움직이고 시각적으로 표현되는 모든 것을 나타내는 기본 클래스입니다. 폰은 AI 컨트롤러나 플레이어 컨트롤러에 의해 빙의(Possess) 될 수 있습니다. 폰 자체는 입력 처리에 대한 로직을 가지지 않으며, 컨트롤러로부터 명령을 받아 행동합니다.

폰의 역할

  • 월드 내 존재: 게임 월드 내에 시각적, 물리적으로 존재합니다. (메시, 콜리전 등)
  • 이동 및 상호작용: 컨트롤러로부터 명령을 받아 이동하고, 다른 오브젝트와 상호작용합니다.
  • 빙의 가능: 플레이어 또는 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 시스템 구축 참조)

플레이어 컨트롤러와 폰의 상호작용

플레이어 컨트롤러와 폰은 PossessUnPossess 과정을 통해 상호작용합니다.

  • Possess: 플레이어 컨트롤러가 특정 폰을 '빙의'하여 제어권을 얻는 과정입니다. 게임 시작 시 Default Pawn Class로 지정된 폰이 자동으로 스폰되어 플레이어 컨트롤러에 의해 빙의됩니다. 플레이어가 사망한 후 다른 폰으로 재스폰될 때도 이 과정이 발생합니다.
  • UnPossess: 플레이어 컨트롤러가 현재 제어하던 폰의 제어권을 놓는 과정입니다.

예시 시나리오

게임 시작: GM_MyGameBP_MyPlayerCharacter를 스폰하고, PC_MyPlayer가 이 폰을 Possess합니다.

플레이어 입력: 플레이어가 키보드 입력을 하면, PC_MyPlayer가 이 입력을 받아 BP_MyPlayerCharacterCharacterMovementComponent에 이동 명령을 내립니다.

플레이어 사망: BP_MyPlayerCharacter가 파괴되지만, PC_MyPlayer는 계속 존재합니다.

재스폰: GM_MyGame이 새로운 BP_MyPlayerCharacter를 스폰하고, 기존의 PC_MyPlayer가 이 새로운 폰을 다시 Possess합니다. 플레이어의 점수나 스탯을 관리하는 PS_MyPlayer는 이 과정에서도 유지되므로, 재스폰 후에도 점수가 초기화되지 않습니다.


핵심 개념 정리

클래스주요 역할특징
플레이어 컨트롤러 (Player Controller)입력 처리, 폰 제어, 카메라/UI 관리각 플레이어당 하나, 서버와 클라이언트에 모두 존재 (RPC 호출), 재스폰 시 유지
폰 (Pawn)게임 월드 내 물리적 존재, 이동 및 상호작용컨트롤러에 의해 빙의될 수 있음, 입력 처리 로직 없음, 재스폰 시 새로 생성
캐릭터 (Character)폰의 하위 클래스, 이족 보행에 최적화, CharacterMovementComponent 내장폰과 동일한 특징, 복잡한 이동 로직 지원

이처럼 언리얼 엔진의 게임플레이 프레임워크는 각 클래스에 명확한 역할을 부여하여, 게임 로직을 체계적으로 분리하고 관리할 수 있도록 돕습니다. 이는 특히 멀티플레이어 환경에서 네트워크 복제 및 동기화를 효율적으로 처리하는 데 필수적입니다.


이번 절에서는 플레이어의 입력과 캐릭터의 움직임을 담당하는 플레이어 컨트롤러와 폰/캐릭터 블루프린트의 역할과 기본적인 설정 방법에 대해 알아보았습니다. 이들은 플레이어와 게임 세계 간의 직접적인 상호작용을 구현하는 데 핵심적인 요소입니다.