언리얼 - 엔진 12 : GameMode

김정환·2025년 4월 10일
0

Unreal Engine

목록 보기
13/24

게임모드 GameMode

GameMode

  • 게임의 전반적인 규칙과 흐름을 총괄 관리하는 일종의 컨트롤 타워, 총괄 관리자
    • 유니티에서 만들어 썼던 GameManager 개념을 언리얼에서는 기본으로 제공하고 있음.
  • 어떤 Pawn 또는 Character를 플레이어에게 스폰해줄지, 어떤 PlayerController를 사용할지, 승패 조건이나 점수 계산 방법은 어떻게 설정할지 등을 게임 플레이의 핵심 로직을 담당.
  • 싱글 플레이에서는 ‘서버’와 ‘클라이언트’ 개념이 나뉘지 않으므로, GameMode가 온전히 로컬에서 동작하여 게임 전체를 제어합니다.

주요 기능과 책임

  1. 플레이어 Pawn/Character 스폰
    • 게임이 시작될 때 (또는 플레이어가 리스폰될 때),
      DefaultPawnClass 또는 지정한 Pawn 클래스자동으로 스폰
    • 스폰된 Pawn을 플레이어가 조작할 수 있도록 PlayerController연동해주는 역할
  2. PlayerController 지정
    • 플레이어의 입력을 전달하고 처리
      • 플레이어의 Pawn은 그저 액터 객체일 뿐, 캐릭터에 빙의(possess)해야 조작 가능
    • 어떤 PlayerController 상속 클래스로 동작할지 설정합니다.
  3. 게임 규칙 (로직) 관리
    • 게임 전반에 관한 함수들이나 동작을 처리
    • 점수 계산, 타이머, 라운드 제어, 난이도 등 게임 전반의 규칙을 정의하고 유지
    • 특정 점수 달성, 보스 몬스터 처치, 제한 시간 종료 등 승리/패배를 결정하는 조건을 관리
    • 승리 혹은 패배가 확정되면, 게임 오버 화면을 띄우거나 다음 레벨로 전환하는 식의 후속 처리를 담당
  4. GameState
    • 전체 게임 흐름에 대한 전역 데이터를 관리 (타이머, 전역 변수 등)
    • 게임 규칙에 따른 로직의 결과 데이터 또는 변수들을 저장
  5. PlayerState
    • 플레이어별 데이터들을 저장 (체력, 점수 등등)
    • 주로 멀티에서 사용
    • 멀티가 아니더라도 상태 저장과 관리를 좀 더 체계적으로 하고 싶을 때 유용

GameMode 클래스 생성

  • GameMode를 상속해서 클래스를 만들때, 부모 클래스 선택지가 2개 있음.
    • GameModeBase와 이를 상속한 GameMode가 있음.
  • 둘의 차이점
    • GameModeBase
      • 게임모드의 기반 클래스.
      • 게임 모드에 대해 자세하게 구현하진 않고 말 그대로 사용할 수 있는 기반을 제공하는 클래스.
      • 보통 처음에 게임모드를 작성한다고하면 도화지 상태의 클래스를 기반으로 작성.
    • GameMode
      • GameModeBase 클래스를 상속받아 제공하는 클래스.
      • 멀티 플레이 관련 기능들을 구현해서 제공하고 있음.

C++ 생성

  • GameModeBase를 상속해서 처음 생성하면 특별한 내용은 없음.
  • 이 상태에서 코드를 작성해서 필요한 내용들을 채워나갈 것.

BP 클래스 생성

  • 에디터에서 사용하기 위해선 C++ 클래스를 BP로 감싸서 사용해야함.
  • BP로 한번 감싸는 이유 :
    • 특정 옵션을 변수화해서 에디터에서 즉각적으로 수정사항을 반영할 수 있음.
      즉, 유용하기 때문
  • 게임모드 BP를 에디터의 설정에 사용해서 레벨에 대한 게임모드를 적용할 수 있음.

게임모드 적용

  • 게임모드를 적용하는 방법은 크게 두 가지가 있음.
    • 전역 적용
    • 레벨 별 적용

전역 설정 : 전체 레벨 적용

  1. Edit > Project Settings > Maps & Modes
  2. Default GameMode 부분의 값을 원하는 GameMode로 설정
  • 이 프로젝트의 모든 레벨에 대해 기본 GameMode가 선택한 게임모드로 작동함.

레벨 별 설정

  1. 게임모드 설정할 레벨 열기
  2. Window > World Settings 창 열기
  3. World Settings의 Default Modes에서 원하는 GameMode 설정
  • 이렇게 설정하면 이 레벨은 전역 설정 대신에 레벨 별로 설정한 GameMode를 사용함.

만약 전역 설정과 레벨 별 설정이 같이 있다면 레벨 별 설정을 사용 (Override).


게임모드 설정 변경

  • GameMode를 넣어줬다면 게임모드에서 사용할 클래스들을 변경할 수 있음.

사용 클래스들

  • Default Pawn Class: 레벨 시작 시 플레이어가 조종하게 될 Pawn (또는 Character) 클래스를 지정
  • HUD Class: 게임 화면에 표시되는 HUD(UI) 요소를 관리하는 클래스를 지정.
  • Player Controller Class: 플레이어 입력 처리카메라 제어, UI와의 상호작용, 폰에 대한 Possess/Unpossess 설정을 담당하는 클래스를 지정.
  • Game State Class / Player State Class: 게임의 전역 상태나 플레이어별 상태를 추적할 때 사용.
  • Spectator Class: 관전자 모드에서 사용할 Pawn 클래스를 지정.
    일반 플레이어와 다른 이동 방식이나 카메라 제어가 필요할 때 활용.

사용할 클래스를 코드로 제어할 수도 있음.

#include "Cp2GameMode.h"
#include "Cp2Character.h"
#include "Cp2PlayerController.h"

ACp2GameMode::ACp2GameMode()
{
	// BP로 해도 되겠지만 코드로 제어해볼 것
	DefaultPawnClass = ACp2Character::StaticClass();	
	PlayerControllerClass = ACp2PlayerController::StaticClass();
}
  • Class::StaticClass() : 객체를 생성하지 않고 클래스를 반환해서 넣어줌.

실행

  • 게임모드를 변경하고 플레이해보면 아웃라이너에서 설정했던 클래스들이 스폰되는 것을 확인할 수 있음.
  • 각 액터들은 자신의 역할에 맞는 기능들을 게임 플레이동안 수행함.
profile
만성피로 개발자

0개의 댓글