게임 개발/학습 일지

언리얼 C++ - Character 클래스를 이용한 캐릭터 구현하기

이개 2026. 4. 15. 21:59

GameMode 클래스

게임매니저 클래스처럼 게임의 총괄 관리자같은 역할을 한다

  • 플레이어 캐릭터 관리 - Pawn 클래스 or Character 클래스
  • PlayerController 클래스를 캐릭터에 빙의시킴
  • 게임 규칙 관리 - 로직(함수)
  • GameState 클래스와 PlayerState 클래스 관리
    • GameState: 게임의 전역 데이터, 예를 들어 점수 등을 관리
    • PlayerState: 개별 캐릭터마다의 데이터. 보통 멀티 게임에서 사용

게임모드베이스와 게임모드의 차이

  • 게임모드베이스
    • 단순한 게임용
    • 멀티플레이 로직이 전혀 없음
    • 초심자용
    • 제공하는 기능이 많지 않음
  • 게임모드
    • 멀티플레이 기능 제공
    • GameState, PlayerState 기능 연동되어 있음

GameMode로 클래스를 만들어준다.

 

이후, 이를 상속받아 블루프린트 클래스를 만들어준다. 에디터 내에서 파라미터 수정이 편리하고 유용한 기능이 많기 때문이다.

상속으로 블루프린트 클래스를 만들어준다.

 

게임모드를 적용하는 방법

1. Editor-> Project settings-> Mas & Modes에서 설정하기

BP_SpartaGameMode로 설정

 

Selected GameMode를 열면 게임모드가 관리하는 항목들이 나온다.

  • Default Pawn Class: 어떤 캐릭터로 플레이할 것인지 결정
  • HUD Class: UI 결정
  • Player Controller: 입력을 조정하는 클래스
  • Game State Class, Player State Class: 데이터 관리
  • Spectator Class: 제3자의 관점으로 지켜보는 시점의 클래스

이렇게 저장하면 모든 레벨에 적용된다.

 

2. World Settings에서 레벨별로 저장하기

Windows-> World Settings에서 창이 나오도록 체크되어있으면, 우측 하단에서 Details 옆의 World Settings 창을 확인할 수 있다.

 

레벨의 게임모드가 우선이고, 전역 게임모드는 후순위다. 레벨에 게임모드를 지정하면 해당 게임모드가 적용된다.

 

 

플레이를 하면 아웃라이너에 설정한 게임모드가 나타난다.

 

캐릭터 클래스와 폰 클래스의 차이

둘 다 사용자가 조작할 수 있는 클래스들이다.

    • 플레이어나 AI 둘 다 소유 가능
    • 캐릭터의 부모가 되는 상위 클래스
    • 컴포넌트가 붙어있지 않음
    • 아무것도 없기 때문에 이동 로직이나 물리 등을 다 구현해주어야 함.
  • 캐릭터
    • Charater Movement에 걷기, 달리기, 점프 등이 적용되어있음
    • 이족보행 인간형의 캐릭터만 만들 수 있음
      • 자동차나 동물은 폰 클래스로 만드는 것이 낫다.

 

C++ 클래스로 캐릭터 생성

캐릭터 클래스 만들기

 

생성된 캐릭터 클래스의 헤더 코드

 

에디터에서 Character를 상속받은 블루프린트 클래스를 만든다.

 

 

기본 컴포넌트

  • 캡슐 컴포넌트
    • 충돌체의 범위를 결정(콜리전 컴포넌트)
  • 애로우 컴포넌트
    • 캐릭터의 정면 방향을 알려줌
  • 메시
    • 스켈레탈 메시 컴포넌트
  • 캐릭터 무브먼트
    • 캐릭터의 이동, 점프 등 다양한 로직을 포함한 컴포넌트

스켈레탈 메시에 기본 메시를 할당한다.

 

스켈레탈 메시

뼈가 계층구조로 나뉘어 있는 메시. 뼈에 움직임에 따라 관련된 부위들이 같이 움직인다.

 

언리얼에서 보통 캐릭터의 정면은 X축이다. 메시를 만들 때 캐릭터가 Y축을 보고 있는 경우가 많으므로 Rotation을 -90도로 주어서 

 

Z축 로테이션을 -90도로 맞춰준다.
위치도 맞추어준다.
캡슐 크기는 Details 패널에서 Capsule Half Height와 Radius로 정해줄 수 있다.

 

이렇게 조정을 하고 C++에서 카메라, 스프링 암 컴포넌트를 붙여줘야한다.

 

 

 

스프링암과 카메라는 바로 입력하면 에러가 난다.

헤더가 없기 때문에 USpringArmComponent, UCameraComponent는 선언 시 에러가 난다. 그러나 헤더를 Character.h 파일에다 가져오면 불필요한 연산이 발생하기 때문에, 임시 선언만 해주고 cpp 파일에서 인클루드 해주기로 한다.

 

미리 선언해둠으로써 에러를 방지하고, 컴파일할 때 불러올 수 있도록 한다.