OSWorlds - 게임 블로그 📌 게임 프로그래밍 📌 게임소식 🔑 로그인 📝 회원가입

언리얼 엔진 PlayerController와 Possess 사용법|캐릭터 조작이 안 될 때 확인할 것

언리얼 엔진에서 Character 블루프린트를 만들고 이동 입력까지 연결했는데 캐릭터가 움직이지 않는 경우가 있습니다. Character는 정상적으로 레벨에 배치되어 있고 입력 노드도 실행되는데, 키보드나 마우스 입력에 반응하지 않는 것입니다.

이때 가장 먼저 확인해야 할 대상이 바로 PlayerController와 Possess 상태입니다.

PlayerController는 사람의 입력을 받아 게임 속 Pawn이나 Character를 조종하는 클래스입니다. Character가 게임 월드에 존재하는 몸이라면 PlayerController는 그 몸을 조종하는 플레이어의 의지에 가깝습니다.

이번 글에서는 PlayerController가 어떤 역할을 담당하는지, Character와 어떻게 연결되는지, 입력 로직을 어디에 작성해야 하는지 실제 프로젝트 구조를 기준으로 알아보겠습니다.

언리얼 엔진에서 Character Blueprint를 만들고 이동 로직까지 구성했는데 막상 실행해보면 키보드 입력이 전혀 먹지 않는 경우가 있습니다.

처음에는 Character Blueprint나 Enhanced Input 설정부터 의심하기 쉽지만, 실제로는 PlayerController가 해당 Character를 Possess하고 있지 않은 경우도 확인해야 합니다.

저도 프로젝트에서 플레이어와 AI 캐릭터를 구성하면서 Character가 존재하는 것과 실제 Controller가 해당 Character를 조종하는 것은 별개의 문제라는 것을 알게 됐습니다.

이번 글에서는 PlayerController와 Possess의 기본 구조부터 캐릭터를 변경하는 방법, 그리고 Character가 움직이지 않을 때 실제로 어떤 부분부터 확인하면 되는지 함께 정리해보겠습니다.

💡 한 줄 정답 — PlayerController는 키보드·마우스·게임패드 입력을 받아 플레이어의 조종 상태와 시점을 관리하고, Possess를 통해 게임 월드의 Pawn 또는 Character와 연결됩니다. 실제 이동·충돌·공격은 Character가 담당하며, 캐릭터나 드론·차량으로 조종 대상을 바꿀 때는 PlayerController를 유지한 채 Possess 대상만 변경하면 됩니다.

목차

  1. PlayerController란 무엇인가?
  2. PlayerController와 Character의 관계
  3. Possess와 UnPossess란?
  4. Possess와 UnPossess는 언제 사용할까?
  5. 게임 시작 시 Character가 연결되는 과정
  6. PlayerController와 Character의 역할 분리
  7. 입력 로직은 어디에 작성해야 할까?
  8. 실제 Character 연결 방법
  9. 캐릭터 입력이 작동하지 않을 때 확인할 사항
  10. Possess 문제를 빠르게 확인하는 방법
  11. 초보자가 주의할 점
  12. 마무리

PlayerController란 무엇인가?

PlayerController는 사람인 플레이어가 Pawn 또는 Character를 조종할 수 있도록 연결하는 Controller 클래스입니다.

언리얼 엔진에는 대표적으로 두 종류의 Controller가 있습니다.

  • PlayerController: 사람의 입력으로 Pawn을 조종
  • AIController: 인공지능 로직으로 Pawn을 조종

PlayerController는 키보드, 마우스, 게임패드 입력을 처리할 수 있습니다. 또한 마우스 커서 표시, 입력 모드 전환, 화면 클릭 판정, 카메라 방향처럼 플레이어 중심의 기능을 관리할 때 사용합니다.

Epic Games 공식 API 문서에서는 PlayerController를 사람이 Pawn을 제어할 때 사용하는 클래스라고 설명합니다. PlayerController의 ControlRotation은 조종 중인 Pawn의 시선이나 조준 방향을 결정할 때 활용됩니다. Unreal Engine PlayerController API

다만 PlayerController 자체가 게임 화면에서 걷고 뛰는 캐릭터는 아닙니다. 레벨 안에서 실제로 움직이는 대상은 PlayerController가 Possess한 Pawn 또는 Character입니다.

PlayerController와 Character의 관계

PlayerController와 Character의 관계를 이해하려면 두 클래스의 역할을 분리해서 생각해야 합니다.

  • PlayerController: 플레이어의 입력과 조종 상태
  • Character: 월드 안에서 움직이는 캐릭터의 몸과 기능

예를 들어 3인칭 액션 게임에서 사용자가 W 키를 눌렀다고 가정해 보겠습니다.

입력은 PlayerController 또는 조종 중인 Character의 Input Component를 통해 감지됩니다. 이후 이동 방향을 계산해 Character에 이동 입력을 전달하면 Character Movement Component가 실제 이동과 충돌을 처리합니다.

키보드·마우스 입력→ PlayerController→ Possess된 Character→ Character Movement Component→ 실제 캐릭터 이동

PlayerController와 Character가 분리된 이유는 플레이어가 게임 도중 다른 Pawn으로 조종 대상을 변경할 수 있기 때문입니다.

예를 들어 플레이어가 평소에는 형사 캐릭터를 조종하지만 특정 구간에서는 드론을 조종한다고 가정해 보겠습니다. 이때 PlayerController를 새로 만들 필요는 없습니다.

기존 PlayerController가 Character의 제어권을 해제하고 드론 Pawn을 새로 Possess하면 됩니다. 드론 조종이 끝나면 다시 기존 Character를 Possess할 수 있습니다.

Possess와 UnPossess란?

Possess는 Controller가 Pawn 또는 Character의 제어권을 얻는 것을 의미합니다.

반대로 UnPossess는 현재 조종 중인 Pawn의 제어권을 해제하는 기능입니다.

PlayerController는 Pawn을 Possess한 후 플레이어의 입력과 시점 제어를 해당 Pawn에 연결합니다. Controller 공식 문서에서도 Controller는 물리적인 형태가 없는 Actor이며, Possess()로 Pawn을 제어하고 UnPossess()로 제어를 해제한다고 설명합니다. Unreal Engine Controller API

블루프린트에서 Possess 노드를 사용할 때는 In Pawn에 조종할 Pawn 또는 Character 참조를 연결해야 합니다.

Get Player Controller→ Possess→ In Pawn에 조종할 Character 또는 Pawn 연결

여기서 주의할 점은 일반 Actor는 Possess할 수 없다는 것입니다.

문, 아이템, 투사체처럼 Actor를 부모로 만든 블루프린트는 레벨에 존재할 수 있지만 PlayerController가 Possess하는 대상은 아닙니다. Possess할 대상은 Pawn이거나 Pawn을 상속받은 Character여야 합니다.

관련 글 → 언리얼 엔진 Actor, Pawn, Character 차이 쉽게 이해하기

Possess와 UnPossess는 언제 사용할까?

Possess는 게임 시작 때 플레이어 캐릭터를 지정하는 용도로만 사용하는 기능은 아닙니다.

게임 도중 플레이어가 다른 Character나 Pawn을 직접 조종해야 할 때도 사용할 수 있습니다.

예를 들어 현재 플레이어가 BP_PlayerCharacter를 조종하고 있다가 차량에 탑승한다고 가정하면,

Get Player Controller → Possess → Vehicle Pawn

구조로 Controller가 조종하는 대상을 변경할 수 있습니다.

차량에서 내릴 때는 다시 원래 Character를 Possess하면 됩니다.

중요한 점은 Controller 자체가 변경되는 것이 아니라 Controller가 조종하는 Pawn이 변경된다는 것입니다.

이 개념을 이해하면 Character 교체, 차량 탑승, 캐릭터 선택 시스템 같은 기능을 만들 때 구조를 이해하기 훨씬 쉬워집니다.

게임 시작 시 Character가 연결되는 과정

일반적인 언리얼 엔진 프로젝트에서는 게임이 시작될 때 다음 과정이 진행됩니다.

레벨 시작→ GameMode 확인→ PlayerController 생성→ Default Pawn Class 생성→ PlayerController가 Pawn을 Possess→ 플레이어 입력 가능

여기서 중요한 설정은 GameMode의 다음 두 항목입니다.

  • Player Controller Class
  • Default Pawn Class

Player Controller Class에는 프로젝트에서 사용할 PlayerController 블루프린트를 지정합니다. Default Pawn Class에는 플레이어가 기본으로 조종할 Character 또는 Pawn을 지정합니다.

예를 들어 다음과 같이 설정할 수 있습니다.

BP_CombatGameMode├─ Player Controller Class: BP_CombatPlayerController└─ Default Pawn Class: BP_PlayerCharacter

게임이 시작되면 BP_CombatPlayerController가 생성되고, GameMode가 준비한 BP_PlayerCharacter를 Possess합니다.

이 방식으로 생성되는 Character는 레벨에 미리 배치하지 않아도 PlayerStart 위치에서 나타날 수 있습니다.

PlayerController와 Character의 역할 분리

초보자가 가장 많이 고민하는 부분은 “이 기능을 PlayerController와 Character 중 어디에 만들어야 하는가?”입니다.

모든 프로젝트에 적용되는 단 하나의 정답은 없습니다. 하지만 해당 기능이 플레이어에게 속하는지, 캐릭터의 몸에 속하는지를 기준으로 판단하면 구조를 정리하기 쉬워집니다.

기능권장 위치이유
실제 이동과 점프Character캐릭터의 물리적인 행동
공격과 피격 처리Character 또는 Combat Component캐릭터의 전투 기능
체력과 스태미나Character 또는 전용 Component캐릭터 상태와 연결
현재 조종 대상PlayerController플레이어의 제어 상태
마우스 커서 표시PlayerController플레이어 입력 환경
UI Only·Game Only 전환PlayerController입력 모드 관리
마우스로 월드 클릭PlayerController화면과 커서에 관련된 기능
Pawn 전환PlayerControllerPossess 대상 관리
일시정지 메뉴 입력PlayerControllerCharacter가 바뀌어도 유지
캐릭터 애니메이션Character·Animation BlueprintMesh와 이동 상태에 종속

핵심 기준은 다음과 같습니다.

캐릭터가 변경되어도 유지돼야 하는 플레이어 기능은 PlayerController에 배치하고, 해당 캐릭터의 몸에 속하는 기능은 Character에 배치합니다.

플레이어가 Character에서 드론으로 조종 대상을 바꾸더라도 일시정지 메뉴, 마우스 커서, 입력 모드와 같은 기능은 계속 필요합니다. 이런 기능은 PlayerController에서 관리하는 것이 자연스럽습니다.

반대로 공격 Montage, 체력, 회피, 피격 처리와 Character Movement 설정은 해당 Character의 몸과 연결되므로 Character 또는 전용 Actor Component에 배치하는 편이 좋습니다.

입력 로직은 어디에 작성해야 할까?

간단한 프로젝트에서는 이동과 점프 입력을 Character에 직접 작성해도 문제가 없습니다. 실제로 언리얼 엔진의 Third Person 템플릿도 캐릭터 이동과 관련된 입력을 Character 중심으로 구성합니다.

하지만 프로젝트가 커지면 입력의 목적에 따라 위치를 나누는 것이 좋습니다.

Character에 배치하기 좋은 입력

  • 이동
  • 점프
  • 회피
  • 앉기
  • 달리기
  • 약공격과 강공격
  • 캐릭터 고유 스킬
  • 캐릭터 전용 상호작용

이 기능들은 조종 중인 Character의 동작과 직접적으로 연결됩니다.

PlayerController에 배치하기 좋은 입력

  • 일시정지 메뉴
  • 인벤토리 열기
  • 마우스 커서 전환
  • UI와 게임 입력 모드 전환
  • 조종 Character 변경
  • 관전 모드
  • 월드 클릭과 대상 선택
  • 플레이어에게 계속 유지되는 공통 단축키

PlayerController는 특정 Character가 사라지거나 교체되더라도 유지될 수 있습니다. 따라서 캐릭터보다 플레이어에게 속하는 입력을 관리하기에 적합합니다.

Enhanced Input Mapping Context 분리

Enhanced Input을 사용한다면 Input Mapping Context를 어느 클래스에서 추가할지도 결정해야 합니다.

게임 전체에서 유지되는 기본 Mapping Context는 PlayerController에서 관리하고, 전투나 특정 Character 전용 Mapping Context는 Character가 Possess될 때 추가하는 방식으로 분리할 수 있습니다.

예를 들어 다음과 같이 구성할 수 있습니다.

IMC_Default- 이동- 카메라- 일시정지IMC_Combat- 약공격- 강공격- 회피- 전투 스킬

전투 모드에 들어갈 때 IMC_Combat을 추가하고 전투가 종료되면 제거하면, 하나의 Input Mapping Context에 모든 기능을 넣는 것보다 관리하기 편합니다.

다만 동일한 Input Action이 여러 Mapping Context에 겹쳐 있으면 우선순위에 따라 예상하지 못한 입력이 실행될 수 있습니다. Mapping Context를 추가할 때 설정한 Priority도 함께 확인해야 합니다.

실제 Character 연결 방법

PlayerController와 Character를 연결하는 가장 기본적인 방법은 GameMode를 사용하는 것입니다.

GameMode를 이용한 자동 연결

  1. PlayerController를 부모로 하는 BP_PlayerController를 만듭니다.
  2. Character를 부모로 하는 BP_PlayerCharacter를 만듭니다.
  3. GameModeBase를 부모로 하는 BP_GameMode를 만듭니다.
  4. BP_GameMode의 Player Controller Class를 BP_PlayerController로 설정합니다.
  5. Default Pawn Class를 BP_PlayerCharacter로 설정합니다.
  6. Project Settings 또는 World Settings에서 BP_GameMode를 사용하도록 지정합니다.
  7. 레벨에 PlayerStart를 배치합니다.

게임을 실행하면 GameMode가 PlayerController와 Character를 준비하고 PlayerController가 Character를 자동으로 Possess합니다.

레벨에 배치한 Character를 사용하는 방법

Character를 레벨에 직접 배치해 사용하고 싶다면 해당 Character를 선택한 후 Details 패널에서 다음 항목을 확인합니다.

Pawn└─ Auto Possess Player   └─ Player 0

Player 0은 첫 번째 로컬 플레이어를 의미합니다.

하지만 GameMode의 Default Pawn Class가 별도로 지정된 상태라면 Character가 중복으로 생성될 수 있습니다.

하나는 레벨에 직접 배치한 Character이고, 다른 하나는 GameMode가 PlayerStart 위치에 생성한 Character입니다. 테스트 중 Character가 두 개 나타난다면 이 설정을 먼저 확인해야 합니다.

게임 도중 다른 Pawn으로 전환하기

차량이나 드론에 탑승하는 시스템에서는 Possess 노드를 직접 사용할 수 있습니다.

드론과 상호작용→ 기존 Character 참조 저장→ Get Player Controller→ 드론 Pawn Possess

드론 조종을 종료할 때는 저장해 둔 Character 참조를 다시 Possess합니다.

드론 조종 종료→ Get Player Controller→ 기존 Character Possess

기존 Character 참조를 저장하지 않으면 원래 캐릭터로 돌아갈 대상을 찾지 못할 수 있으므로 전환 전에 변수로 보관하는 것이 좋습니다.

캐릭터 입력이 작동하지 않을 때 확인할 사항

Character가 움직이지 않을 때 입력 노드를 무작정 다시 만드는 것보다 아래 항목을 순서대로 확인하는 것이 빠릅니다.

GameMode가 현재 레벨에 적용되었는가?

Project Settings에서 Default GameMode를 설정했더라도 특정 레벨의 World Settings에 다른 GameMode Override가 지정되어 있을 수 있습니다.

현재 레벨에 실제로 어떤 GameMode가 적용되고 있는지 확인하세요.

Default Pawn Class가 올바른가?

GameMode의 Default Pawn Class가 None이거나 다른 Character로 지정되어 있으면 예상한 Character가 생성되지 않습니다.

Character 블루프린트의 이름이 비슷한 경우 테스트용 Character가 지정되어 있지 않은지도 확인해야 합니다.

PlayerController Class가 올바른가?

커스텀 PlayerController에 입력 모드나 Mapping Context 추가 로직을 작성했다면 GameMode가 실제로 해당 PlayerController를 사용하고 있는지 확인해야 합니다.

기본 PlayerController가 생성되고 있다면 커스텀 PlayerController에 작성한 BeginPlay나 입력 이벤트는 실행되지 않습니다.

Character가 Possess되었는가?

플레이 중 Get Player Controller에서 Get Controlled Pawn을 실행하면 현재 조종 중인 Pawn을 확인할 수 있습니다.

결과가 None이라면 PlayerController가 아무 Pawn도 Possess하지 않은 상태입니다. 다른 Pawn이 반환된다면 예상과 다른 대상을 조종하고 있는 것입니다.

Enhanced Input Mapping Context가 추가되었는가?

Input Action과 Input Mapping Context를 만들었더라도 로컬 플레이어의 Enhanced Input Subsystem에 Mapping Context를 추가하지 않으면 입력 이벤트가 실행되지 않습니다.

다음 항목을 확인하세요.

  • 올바른 Mapping Context가 추가되었는가?
  • Mapping Context가 너무 일찍 제거되지 않았는가?
  • Input Action이 실제 키와 연결되어 있는가?
  • 다른 Mapping Context가 더 높은 Priority를 가지고 있는가?

Input Mode가 UI Only로 남아 있지 않은가?

메뉴를 닫은 뒤에도 Input Mode가 UI Only로 남아 있으면 게임 입력이 Character에 정상적으로 전달되지 않을 수 있습니다.

메뉴를 종료할 때는 프로젝트 구조에 따라 다음 처리가 필요합니다.

  • Set Input Mode Game Only
  • 마우스 커서 숨김
  • 게임 일시정지 해제
  • 키보드 포커스 반환
  • 필요한 Mapping Context 복원

특히 Pause Menu를 열고 닫은 후에만 Character 입력이 멈춘다면 Possess보다 Input Mode와 Widget 포커스를 먼저 확인하는 것이 좋습니다.

Character가 중복 생성되지 않았는가?

GameMode가 Character를 생성하는 동시에 레벨에도 Character를 직접 배치하면 서로 다른 Character를 바라보며 디버깅하는 문제가 생길 수 있습니다.

플레이 중 World Outliner를 확인해 Player Character가 몇 개 존재하는지 살펴보세요. 현재 Possess된 Character를 확인하려면 Get Controlled Pawn 결과를 출력하는 방법이 가장 정확합니다.

Character가 있는데 조작되지 않을 때 확인할 것

Character Blueprint가 정상적으로 생성됐는데 키보드나 마우스 입력이 들어오지 않는다면 이동 Blueprint를 수정하기 전에 현재 어떤 Pawn이 Possess되어 있는지 확인하는 것이 좋습니다.

가장 먼저 확인할 부분은 GameMode입니다.

GameMode → Default Pawn Class

여기에 실제 플레이어로 사용할 Character Blueprint가 지정되어 있는지 확인합니다.

다음은 레벨에 Character를 직접 배치한 경우입니다.

Character Blueprint의 Details에서 다음 설정을 확인합니다.

Auto Possess Player → Player 0

Player 0으로 설정하면 게임 시작 시 첫 번째 PlayerController가 해당 Character를 자동으로 Possess할 수 있습니다.

반대로 AI 캐릭터라면 Auto Possess Player가 아니라 다음 설정을 확인합니다.

AI Controller Class

Auto Possess AI

플레이어 캐릭터와 AI 캐릭터는 모두 Character를 사용할 수 있지만 누가 해당 Character를 조종하는지에 따라 Controller 설정이 달라집니다.

그래서 Character가 움직이지 않을 때는 단순히 Character Blueprint만 확인하기보다

GameMode → PlayerController → Possessed Pawn → Character → Input

순서로 확인하면 문제 범위를 빠르게 좁힐 수 있습니다.

실제 사용 사례: Character와 드론 조종 전환

3인칭 액션 게임에서 플레이어가 형사 캐릭터를 조종하다가 정찰용 드론을 사용하는 상황을 예로 들어보겠습니다.

기본 상태에서는 다음과 같이 연결됩니다.

BP_PlayerController→ Possess→ BP_PlayerCharacter

플레이어가 드론과 상호작용하면 현재 Character 참조를 PlayerController 변수에 저장하고 드론 Pawn을 Possess합니다.

CurrentCharacter 변수에 Character 저장→ BP_Drone Possess→ 드론 전용 Mapping Context 추가→ Character 전용 Mapping Context 제거

드론 사용을 종료하면 반대 순서로 처리합니다.

드론 Mapping Context 제거→ Character Mapping Context 추가→ 저장된 CurrentCharacter Possess

이 구조의 장점은 PlayerController가 바뀌지 않는다는 것입니다. PlayerController에 배치한 일시정지 메뉴, UI 입력 모드와 공통 단축키도 그대로 유지할 수 있습니다.

반면 이동과 공격 로직은 각 Pawn에 따로 구현할 수 있습니다.

  • BP_PlayerCharacter: 걷기, 점프, 회피, 근접 공격
  • BP_Drone: 비행, 상승, 하강, 카메라 확대
  • BP_PlayerController: 조종 대상 전환, 메뉴, 공통 UI

이것이 PlayerController와 Pawn을 분리해 사용하는 대표적인 이유입니다.

Possess 문제를 빠르게 확인하는 방법

Possess 문제인지 확인하고 싶다면 Blueprint에서 현재 Controller가 조종하고 있는 Pawn을 직접 출력해보는 방법도 있습니다.

예를 들어 PlayerController에서

Get Controlled Pawn → Get Display Name → Print String

을 연결합니다.

PIE를 실행했을 때 화면에 예상했던 Character 이름이 출력되는지 확인합니다.

예상한 Character가 아니라 다른 Pawn이 출력되거나 None이 나온다면 Character의 이동 로직보다 Possess 설정을 먼저 확인하는 것이 좋습니다.

이런 방식으로 현재 Controller와 Character의 연결 상태를 먼저 확인하면 Input이나 Character Movement까지 불필요하게 수정하는 일을 줄일 수 있습니다.

초보자가 주의할 점

PlayerController에 모든 기능을 넣지 않는다

PlayerController가 입력을 받는다고 해서 공격, 체력, 피격, 애니메이션까지 모두 PlayerController에 넣을 필요는 없습니다.

캐릭터의 몸에 직접 관련된 기능은 Character나 전용 Component에 배치해야 다른 Character와 AI에도 재사용하기 쉽습니다.

예를 들어 Combat Component를 Character에 부착하면 플레이어뿐만 아니라 AI가 조종하는 적 Character에도 동일한 전투 기능을 적용할 수 있습니다.

Get Player Character를 반복해서 사용하지 않는다

Get Player Character는 편리한 노드지만 프로젝트 곳곳에서 계속 호출하면 첫 번째 플레이어 Character에 강하게 의존하는 구조가 됩니다.

현재 PlayerController가 조종 중인 Pawn이 필요하다면 Get Controlled Pawn을 사용하고, 특정 Character 참조가 반복해서 필요하다면 변수로 관리하는 방법을 고려하세요.

Possess 대상이 Pawn인지 확인한다

Possess 노드의 In Pawn에는 일반 Actor를 연결할 수 없습니다.

조종해야 하는 드론이나 차량을 Actor로 만들었다면 Pawn을 부모 클래스로 다시 구성하거나 Pawn 기반의 별도 조종용 클래스를 만들어야 합니다.

Possess 직후 참조가 항상 준비되었다고 단정하지 않는다

Character 생성, 레벨 전환 또는 네트워크 환경에서는 참조가 준비되는 시점이 예상과 다를 수 있습니다.

Possess된 Pawn을 Cast하기 전에 Is Valid를 사용하거나, On Possessed, On Controller Changed 같은 시점을 활용하면 Accessed None 오류를 줄일 수 있습니다.

멀티플레이에서는 PlayerController의 존재 범위가 다르다

싱글플레이에서는 PlayerController 하나만 생각해도 되지만 멀티플레이에서는 각 플레이어가 자신의 PlayerController를 가집니다.

공식 문서에 따르면 PlayerController는 서버와 해당 PlayerController를 소유한 클라이언트에 존재하며, 다른 원격 플레이어의 클라이언트에는 존재하지 않습니다. Unreal Engine PlayerController API

따라서 모든 클라이언트에서 다른 플레이어의 PlayerController를 직접 가져올 수 있다고 가정하면 안 됩니다. 다른 플레이어에게도 공유해야 하는 정보는 PlayerState나 복제 가능한 Actor에 저장하는 구조를 검토해야 합니다.

마무리

PlayerController와 Possess를 처음 접하면 Character와 Controller의 역할이 헷갈릴 수 있습니다.

하지만 실제로 프로젝트를 만들면서 생각해보면 구조는 비교적 단순합니다.

Character는 게임 안에 존재하는 캐릭터이고, PlayerController는 플레이어의 입력과 제어를 담당하며, Possess는 둘을 연결하는 과정입니다.

Character가 정상적으로 생성됐는데 움직이지 않는다면 바로 이동 Blueprint부터 수정하기보다 현재 PlayerController가 어떤 Pawn을 Possess하고 있는지 먼저 확인하는 것이 좋습니다.

저도 캐릭터 관련 문제를 확인할 때는 GameMode → Controller → Possessed Pawn → Input 순서로 범위를 좁혀 확인하는 편입니다.

이 구조를 이해해두면 이후 AI Controller, 캐릭터 교체, 차량 탑승처럼 Controller가 다른 Pawn을 조종하는 시스템을 구현할 때도 훨씬 이해하기 쉬워집니다.

참고 사이트

Unreal Engine Character API
Character가 Pawn을 상속하며 Mesh, Collision과 Character Movement를 이용해 이동하는 구조를 확인할 수 있습니다.

Unreal Engine Gameplay Framework
PlayerController, Pawn, Character, GameMode 등 언리얼 엔진의 기본 게임플레이 클래스가 어떤 관계로 구성되는지 확인할 수 있습니다.

Unreal Engine PlayerController API
PlayerController의 기본 역할과 Control Rotation, 카메라 관리 및 네트워크상의 존재 범위를 확인할 수 있습니다.

Unreal Engine Controller API
Possess와 UnPossess를 포함한 Controller의 기본 구조를 살펴볼 수 있습니다.

Unreal Engine Pawn API
Pawn의 Auto Possess Player, AI Controller Class와 Controller 연결에 관련된 속성을 확인할 수 있습니다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤