본문 바로가기

언리얼 + cpp

언리얼C++ 5일차(GameMode)

게임 모드는 게임의 전반적인 규칙과 흐름을 총괄 관리하는 컨트롤 타워 역할을 하는 클래스다.

승패 조건이나 점수 계산 방법은 어떻게 설정할지 등 게임 플레이의 핵심 로직을 담당한다.

GameMode의 주요 기능과 책임

  • 플레이어 Pawn/Character 스폰
    • 게임이 시작될 때 (또는 플레이어가 리스폰될 때), DefaultPawnClass 또는 지정한 Pawn 클래스를 자동으로 스폰합니다.
    • 스폰된 Pawn을 플레이어가 조작할 수 있도록 PlayerController와 연동해주는 역할을 합니다.
  • PlayerController 지정
    • 플레이어의 입력(키보드, 마우스, 게임패드 등)을 전달하고 처리하는 PlayerController가 어떤 클래스로 동작할지 설정합니다.
  • 게임 규칙 관리
    • 점수 계산, 타이머, 라운드 제어, 난이도 등 게임 전반의 규칙을 정의하고 유지합니다.
    • 특정 점수 달성, 보스 몬스터 처치, 제한 시간 종료 등 승리/패배를 결정하는 조건을 관리합니다.
    • 승리 혹은 패배가 확정되면, 게임 오버 화면을 띄우거나 다음 레벨로 전환하는 식의 후속 처리를 담당합니다.
  • GameState / PlayerState 사용
    • GameState는 전체 게임 흐름 (타이머, 전역 변수 등), PlayerState는 플레이어별 정보 (체력, 점수 등)를 관리하는 용도로 쓰일 수 있습니다.
    • 멀티플레이만큼 복잡하게 쓰진 않더라도, 상태 저장과 관리를 좀 더 체계적으로 하고 싶을 때 유용합니다.

GameMode 클래스를 생성하려 검색하면 GameModeBase와 GameMode 두 가지가 뜨는데 GameModeBase는 단순화 된 형태로 멀티플레이 관련 로직이 거의 포함되어 있지 않고 싱글 플레이 게임을 구현할 때 주로 사용한다.(비교적 간단한 게임)

GameMode 클래스에는 언리얼에서 제공하는 멀티플레이 기능 (세션, 플레이어 연결 로직 등)을 일부 포함하고 있으며 싱글 플레이에서도 문제없이 사용할 수 있다. 필요에 따라 GameState, PlayerState 등 연동이 활성화 되어있다.

C++ 게임 모드 클래스를 활용하려면 일반적으로 블루프린트 클래스로 한번 더 감싸는 방식을 권장한다.(C++클래스 우클릭해서 블루프린트로 만들기)

이렇게 하면 에디터에서 세부 파라미터를 수정하기 훨씬 편리하기 때문이다.

이렇게 만든 BP_게임모드를 프로젝트 전역 설정을 하려면 상단 메뉴 Edit ->Project Settings -> Maps & Modes에서 Default GameMode를 BP_FirstGameMode로 지정하면 이 프로젝트의 모든 레벨에 대해 기본 게임모드가 설정된다.

만약 레벨 별로 설정하고 싶다면 Window -> World Settings에서 현재 열려 있는 레벨의 GameModeOverride로 게임모드를 지정할 수 있다. 이렇게 하면 이 특정 레벨은 프로젝트 전역 게임모드 대신 따로 설정한 게임모드를 사용하게 된다.