icon안동민 개발노트

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


 플레이어 컨트롤러(Player Controller)와 폰(Pawn) 또는 캐릭터(Character)는 언리얼 엔진에서 플레이어의 입력과 게임 내 표현을 관리하는 핵심 클래스입니다.

 이 두 클래스의 상호작용을 이해하는 것은 효과적인 게임플레이 구현에 필수적입니다.

플레이어 컨트롤러와 폰의 역할 및 관계

  1. 플레이어 컨트롤러 (Player Controller)
  • 플레이어의 입력을 처리
  • 카메라 제어
  • 게임 로직과 UI 관리
  • 네트워크 게임에서 클라이언트 역할
  1. 폰 (Pawn) / 캐릭터 (Character)
  • 게임 월드 내 플레이어의 물리적 표현
  • 이동 및 충돌 처리
  • 시각적 표현 (메시, 애니메이션 등)
  • 게임플레이 관련 속성 (체력, 인벤토리 등) 관리

 관계: 플레이어 컨트롤러가 폰을 '소유(Possess)'하여 제어

플레이어 컨트롤러와 폰의 관계도

플레이어 컨트롤러 블루프린트 생성 및 설정

  1. 콘텐츠 브라우저에서 우클릭
  2. 'Blueprint Class' 선택 후 'Player Controller' 선택
  3. 플레이어 컨트롤러 블루프린트 이름 지정 (예 : BP_MyPlayerController)

 게임 모드에서 플레이어 컨트롤러 설정

BP_MyGameMode:
Default Pawn Class: BP_MyPlayerController
플레이어 컨트롤러 블루프린트 생성 과정

입력 처리 구현

 프로젝트 설정에서 입력 매핑 정의 후, 플레이어 컨트롤러에서 처리

Event BeginPlay:
    |
[Enable Input]
 
InputAction Move:
    |
[Get Controlled Pawn] --> [Add Movement Input]
 
InputAction Look:
    |
[Add Controller Yaw Input]
[Add Controller Pitch Input]
입력 처리 블루프린트

카메라 제어

 플레이어 컨트롤러에서 카메라 설정 및 제어

Function SetupPlayerCamera:
[Create Camera Component]
[Attach to Controlled Pawn]
[Set Camera Properties]
 
Event BeginPlay:
    |
[SetupPlayerCamera]
 
Function UpdateCameraZoom:
[Get Camera Component] --> [Set Field of View]
카메라 제어 로직

폰 블루프린트 생성 및 기본 움직임 설정

  1. 'Blueprint Class' 선택 후 'Character' 선택 (일반 Pawn 대신 Character 사용 권장)
  2. 폰 블루프린트 이름 지정 (예 : BP_MyCharacter)

 기본 움직임 설정

Character Movement Component:
- Max Walk Speed: 600
- Jump Z Velocity: 420
- Air Control: 0.2
 
Event BeginPlay:
    |
[Initialize Character Stats]
 
Function Move:
[Add Movement Input]
 
Function Jump:
[Jump]
폰 기본 움직임 설정

상호작용 구현

 폰에서 상호작용 가능한 객체 감지 및 처리

Function PerformInteraction:
[Line Trace by Channel] --> [Branch: Hit Result?]
                              |
            [Get Hit Actor] <-- [True]
                  |
    [Cast To IInteractable] --> [Branch: Is Interactable?]
                                   |
                     [Call Interact] <-- [True]
 
InputAction Interact:
    |
[PerformInteraction]
상호작용 구현 예시

플레이어 컨트롤러와 폰 간의 통신

  1. 직접 참조
Player Controller:
[Get Controlled Pawn] --> [Cast To BP_MyCharacter]
                      --> [Call Character Function]
 
Character:
[Get Controller] --> [Cast To BP_MyPlayerController]
                 --> [Call Controller Function]
  1. 인터페이스 사용
Interface: BPI_PlayerActions
 
Player Controller:
[Get Controlled Pawn] --> [Does Implement Interface?]
                      --> [Call Interface Function]
 
Character:
Implements BPI_PlayerActions
컨트롤러와 폰 간 통신 방법

포제션 (Possession) 개념

 포제션은 플레이어 컨트롤러가 폰을 제어하기 시작하는 과정입니다.

Event OnPossess:
    |
[Set Up Controller-Specific Logic]
[Initialize Pawn References]
 
Event OnUnPossess:
    |
[Clean Up Controller-Specific Logic]
[Clear Pawn References]
포제션 프로세스 다이어그램

AI 컨트롤러와의 차이점

  1. 입력 처리
  • 플레이어 컨트롤러: 사용자 입력 처리
  • AI 컨트롤러: 프로그래밍된 로직 또는 비헤이비어 트리 사용
  1. 네트워크 역할
  • 플레이어 컨트롤러: 클라이언트 권한
  • AI 컨트롤러: 서버에서만 실행
  1. 카메라 제어
  • 플레이어 컨트롤러: 플레이어 시점 카메라 관리
  • AI 컨트롤러: 카메라 제어 없음
  1. UI 상호작용
  • 플레이어 컨트롤러: HUD 및 메뉴 시스템과 상호작용
  • AI 컨트롤러: UI 상호작용 없음
플레이어 컨트롤러와 AI 컨트롤러 비교

고급 기능 및 팁

  1. 리플리케이션(Replication) 고려
  • 멀티플레이어 게임에서 중요한 변수와 함수 복제 설정
Variable: Health (Replicated)
Function: UpdateHealth (Run on Server)
  1. 입력 모드 전환
  • UI 표시 시 게임 입력 비활성화
Function: ShowMenu
[Set Input Mode UI Only]
[Show Mouse Cursor]
 
Function: ReturnToGame
[Set Input Mode Game Only]
[Hide Mouse Cursor]
  1. 폰 전환 (Pawn Switching)
  • 다양한 폰 사이를 전환하는 기능 구현
Function: SwitchToDifferentPawn
[UnPossess Current Pawn]
[Spawn New Pawn]
[Possess New Pawn]
  1. 디버깅 도구 구현
  • 플레이어 컨트롤러에 디버그 정보 표시 기능 추가
Event DrawHUD
      |
[Draw Debug Information]
고급 기능 구현 예시

 플레이어 컨트롤러와 폰(또는 캐릭터)은 게임플레이 구현의 핵심 요소입니다. 플레이어 컨트롤러는 플레이어의 의도를 해석하고 관리하는 '두뇌' 역할을 하며, 폰은 이를 게임 월드에서 실제로 실행하는 '신체' 역할을 합니다.

 효과적인 게임플레이 시스템을 구축하기 위해서는 이 두 클래스 간의 명확한 책임 분리와 효율적인 통신 방법을 설계하는 것이 중요합니다. 플레이어 컨트롤러는 입력 처리, 카메라 제어, UI 관리 등을 담당하고, 폰은 물리적 이동, 상호작용, 게임 내 상태 관리 등을 담당하도록 구성하면 좋습니다.

 멀티플레이어 게임 개발 시에는 네트워크 리플리케이션을 고려한 설계가 필수적입니다. 플레이어 컨트롤러와 폰의 중요 변수와 함수에 대해 적절한 리플리케이션 설정을 해야 합니다.

 또한, 플레이어 경험을 향상시키기 위해 부드러운 카메라 전환, 반응성 있는 입력 처리, 직관적인 UI 상호작용 등을 구현하는 것이 좋습니다. 디버깅 도구를 추가하면 개발 과정에서 문제를 빠르게 식별하고 해결할 수 있습니다.

 최종적으로, 플레이어 컨트롤러와 폰의 설계는 게임의 장르와 요구사항에 따라 크게 달라질 수 있으므로, 프로젝트의 특성을 잘 고려하여 유연하고 확장 가능한 구조를 만드는 것이 중요합니다.