언리얼 엔진으로 게임을 제작할 때 가장 먼저 마주치고, 절대 놓쳐서는 안 되는 핵심 개념이 바로 게임 모드(GameMode)입니다. 지금 개념을 확실히 잡지 않으면 나중에 멀티플레이 구현이나 레벨 전환 시 데이터가 꼬여 처음부터 다시 코딩해야 하는 대참사가 일어날 수 있으니 마감 임박한 과제를 보듯 집중해서 확인하세요!
에픽 공식 문서 확인
1. 언리얼 엔진 게임 모드(GameMode)란 무엇인가?
언리얼 엔진에서 게임 모드(GameMode)는 게임의 핵심 규칙과 전체적인 흐름을 총괄하는 절대적인 룰북입니다. 체스로 비유하자면 말들이 어떻게 움직여야 하는지, 언제 승패가 결정되는지를 정의하는 규칙 집합체라고 볼 수 있죠.
게임 모드는 게임이 실행될 때 가장 먼저 세팅되며, 다음과 같은 핵심 로직과 기본 클래스들을 스폰하고 관리하는 중추적인 역할을 담당합니다.
- 게임의 핵심 로직 및 승리/패배 규칙 설계
- 전체적인 게임 진행 흐름 제어
- 플레이어가 사용할 캐릭터(Pawn) 및 주요 액터 스폰
- HUD, Controller, State 클래스 등 필수 프레임워크 관리
쉽게 말해, "이 레벨(맵) 안에서 게임이 어떤 방식으로 돌아가야 하는가?"를 결정하는 총감독이라고 이해하시면 됩니다. 실무에서는 이 GameMode를 어떻게 설계하느야에 따라 프로젝트의 구조적 완성도가 완전히 달라집니다.
2. 월드 세팅(World Settings)에서 지정 상태 파악하기
내가 만든 레벨에 어떤 게임 모드가 켜져 있는지 확인하는 방법은 아주 간단합니다. 언리얼 에디터 상단 메뉴에서 Window → World Settings를 클릭하면 우측 탭에 월드 세팅 창이 활성화되는데, 여기서 GameMode 항목을 바로 체크할 수 있습니다.
간혹 초보 분들이 월드 세팅을 봤을 때 GameMode가 None으로 되어 있어서 "어? 게임 모드가 안 켜져 있네?" 하고 당황하시는 경우가 많습니다. 하지만 걱정하실 필요 없습니다. None으로 표기되어 있더라도 언리얼 엔진은 엔진 내부적으로 지정된 시스템을 강제 적용합니다.
레벨 개별 세팅에 아무런 게임 모드가 지정되어 있지 않다면, 프로젝트 전체를 관장하는 Default GameMode가 자동으로 백그라운드에서 실행되기 때문입니다.
3. 프로젝트 설정과 맵별 우선순위 법칙
그렇다면 방금 말씀드린 Default GameMode는 어디서 관리할까요? 경로는 Edit → Project Settings → Maps & Modes → Default GameMode 순으로 진입하시면 됩니다. 프로젝트를 생성할 때 고른 템플릿에 따라 이 기본값이 미리 세팅되어 있죠.
여기서 중요한 실무 포인트! 언리얼 엔진이 게임 모드를 적용할 때는 엄격한 우선순위 규칙이 작동합니다.
| 적용 순위 | 지정 위치 | 설명 |
|---|---|---|
| 1순위 (최우선) | 레벨별 World Settings | 해당 맵에만 특수하게 적용되는 규칙 (예: 보스전, 로비) |
| 2순위 (기본값) | Project Settings (Default) | 월드 세팅이 None일 때 전체 프로젝트에 기본 적용되는 규칙 |
따라서 특정 스테이지나 이벤트 맵에서만 전혀 다른 규칙을 보여주고 싶다면, 프로젝트 설정을 건드리는 게 아니라 해당 레벨의 월드 세팅을 열어서 전용 GameMode를 꽂아주어야 합니다.
깃허브 소스코드 소스
4. 반드시 알아야 할 6가지 핵심 관리 클래스
GameMode는 단순히 혼자 일하는 게 아니라, 게임을 구성하는 6가지 핵심 서브 클래스들을 지휘하는 대장님입니다. 이 구조를 이해하는 것이 언리얼 엔진 프레임워크의 핵심입니다.
4-1. Default Pawn Class
플레이어가 게임을 시작하자마자 자동으로 빙의(Possess)하여 조종하게 되는 캐릭터나 액터를 의미합니다. 캐릭터 모델링과 이동 로직이 담긴 클래스를 여기에 등록하면, 게임 시작 시 스폰 포인트에서 해당 캐릭터가 자동으로 생성됩니다.
4-2. HUD Class
HUD(Head-Up Display)는 플레이어 화면에 상시로 띄워지는 체력 바, 현재 점수, 미니맵, 남은 탄약수 같은 시각적 UI를 관리하는 클래스입니다. 최근에는 위젯(UMG)을 주로 쓰지만, 이를 총괄하는 뼈대로서 HUD 클래스가 베이스가 됩니다.
4-3. Player Controller Class
마우스 클릭, 키보드 입력, 게임패드 신호를 받아서 실질적으로 캐릭터를 움직이게 만드는 인간의 '두뇌' 역할을 합니다. 폰(Pawn)이 육체라면 플레이어 컨트롤러는 영혼입니다. 스크립트 상에서 "진짜 나 자신"을 지칭할 때는 보통 이 컨트롤러를 가져옵니다.
4-4. Game State Class
서버와 클라이언트가 모두 공유해야 하는 게임 전체의 상태 정보(현재 라운드, 팀 스코어, 남은 제한 시간 등)를 관리합니다. GameMode가 규칙을 정하는 판사라면, GameState는 현재 전광판에 찍히는 점수를 실시간으로 동기화하는 기록원입니다.
4-5. Player State Class
게임 전체가 아닌 개인별 데이터(플레이어 이름, 개인 킬/데스 수, 현재 레벨)를 저장하고 동기화하는 클래스입니다. 특히 멀티플레이 게임에서 다른 유저들에게 내 정보를 실시간으로 브로드캐스팅할 때 핵심적으로 사용됩니다.
4-6. Spectator Class
전장에 직접 참여하지 않고 관전자 모드 혹은 옵저버 상태로 맵을 자유롭게 돌아다닐 때 사용하는 특수 클래스입니다. 배틀로얄 게임에서 사망 후 아군 화면을 볼 때나 e스포츠 중계 카메라 시스템을 만들 때 유용하게 쓰입니다.
5. Third Person 템플릿으로 구조 완벽 분석
이해를 돕기 위해 언리얼 엔진에서 기본 제공하는 Third Person(3인칭) 템플릿을 예시로 들어보겠습니다. 콘텐츠 브라우저에서 Add Feature or Content Pack을 통해 3인칭 템플릿을 추가하고 플레이 버튼을 누르면 즉시 사람 모양의 캐릭터가 움직이는 것을 볼 수 있죠?
이게 가능한 이유가 바로 시스템의 연쇄 작용 때문입니다.
- 3인칭 레벨의 월드 세팅에 ThirdPersonGameMode가 박혀 있음
- 그 GameMode 내부를 열어보면 Default Pawn Class 항목에 ThirdPersonCharacter가 등록되어 있음
- 엔진이 이를 인지하고 시작과 동시에 캐릭터를 스폰 후, 컨트롤러를 빙의시킴
결국 우리가 직접 캐릭터를 스폰하는 코드를 짜지 않아도, 게임 모드가 뒤에서 이 모든 스폰 및 매칭 과정을 자동으로 처리해 준 덕분입니다.
6. 실무 유저를 위한 레벨별 설계 노하우
현업 전업 개발자나 고수 블로거들이 항상 강조하는 테크닉은 "레벨의 목적에 맞게 게임 모드를 쪼개라"는 것입니다. 하나의 게임 모드에 모든 규칙을 때려 박으면 나중에 유지보수가 불가능해집니다.
예를 들어, 인게임 진입 전 대기하는 로비 레벨에서는 UI 중심의 `LobbyGameMode`를 써서 캐릭터 조종을 막고, 본격적인 공성전이 벌어지는 전투 레벨에서는 `BattleGameMode`를 꽂아서 대규모 스폰 규칙을 적용하는 방식이죠. 레벨마다 독립된 룰북을 부여할 수 있다는 이 유연함을 반드시 기억하고 아키텍처를 설계하시기 바랍니다.
개발자 포럼 바로가기
- Q1. GameMode와 GameModeBase의 차이점은 무엇인가요?
- GameModeBase는 아주 기본적인 필수 기능만 담긴 가벼운 클래스이며, 일반적인 싱글 플레이나 심플한 게임에 적합합니다. 반면 GameMode는 멀티플레이 매치 흐름 제어(Match State) 등 더 무겁고 복잡한 멀티플레이어용 기능들이 추가되어 있는 확장 버전입니다.
- Q2. 멀티플레이 게임에서 클라이언트가 GameMode에 접근할 수 있나요?
- 아니요, 안전한 보안을 위해 GameMode는 오직 오지(Server)에만 존재합니다. 클라이언트 측에서 게임 모드를 캐스팅하려고 하면 무조건 None(Null)이 반환됩니다. 클라이언트가 공유해야 하는 정보는 반드시 GameState를 통해 접근해야 합니다.
- Q3. 게임 도중에 실시간으로 GameMode를 바꿀 수 있나요?
- 한 레벨(맵)이 실행 중인 동안에는 실시간으로 다른 게임 모드로 교체하는 것이 불가능합니다. 규칙을 바꾸고 싶다면 다른 GameMode가 세팅된 레벨로 이동(Open Level)하거나, 내부 부모 클래스 안에서 상태 패턴(State Pattern)을 활용해 내부 로직 흐름을 전환해야 합니다.
- Q4. 플레이어가 죽었을 때 리스폰 시키는 로직은 어디에 짜야 하나요?
- 리스폰 규칙은 게임의 핵심 흐름이자 규칙에 해당하므로 GameMode 클래스 내부에 구현하는 것이 정석입니다. 플레이어 컨트롤러가 사망 신호를 서버의 GameMode에 보내면, GameMode가 이를 받아 새로운 캐릭터를 스폰하고 재빙의시키는 방식을 취합니다.
- Q5. Default Pawn Class를 None으로 두면 어떻게 되나요?
- 기본 폰 클래스를 None으로 설정하면 게임 시작 시 아무런 캐릭터도 스폰되지 않습니다. 마우스 커서만 뜨는 메인 메뉴 화면이나 UI 중심의 퍼즐 게임, 혹은 나중에 스크립트로 특정 상황에 맞춰 캐릭터를 수동 스폰하고 싶을 때 의도적으로 None 설정을 사용합니다.
- Q6. 캐릭터 조종이 안 되는데 Player Controller 문제일까요?
- 조종이 안 된다면 1) GameMode에 올바른 Player Controller가 등록되었는지, 2) 스폰된 Pawn에 컨트롤러가 정상적으로 빙의(Possess) 되었는지, 3) 혹시 UI 조작 모드로 인해 입력 포커스가 마우스로만 쏠려 있는지(Set Input Mode UI Only) 확인해 보셔야 합니다.

