← SEARCHABLE ARCHIVE
Unreal Engine · 2026-07-01

GameMode, PlayerController, GameInstance의 역할

ProjectTB의 메뉴와 전투 구조로 보는 Unreal Framework

INTERACTIVE READING MODE →

본 블로그 작성 글들은, 강의를 목표로 하고 제작되었습니다. 또한 작성된 글의 정보도 틀렸을 수 있으니, 주의해주세요.

Unreal 프로젝트가 커지면 GameMode, PlayerController, GameInstance에 기능을 아무렇게나 넣기 시작하기 쉽다. ProjectTB에서는 메인 메뉴와 전투를 분리하면서 각 클래스의 책임을 다시 정리했다.

GameMode는 현재 월드의 규칙이다

TBMainMenuGameMode는 메인 메뉴 흐름을 담당하고, TBGameMode는 원정과 전투 규칙을 담당한다. 한 GameMode가 메뉴, 캐릭터 선택, 전투를 전부 떠안게 만들지 않았다.

MainMenu World
TBMainMenuGameMode
TBMainMenuPlayerController
TBMainMenuWidget

Battle World
TBGameMode
TBPlayerController
TBExpeditionHUDWidget

GameMode는 월드가 바뀌면 새로 만들어진다. 그러므로 현재 전투의 승패, 배치 제한, 적 생성처럼 해당 월드의 규칙을 넣기 좋다.

PlayerController는 플레이어의 입력과 의도다

PlayerController는 마우스 클릭, 선택, 카메라 입력처럼 플레이어가 월드에 내리는 명령을 연결한다. ProjectTB에서는 좌클릭 아군 선택과 적 Hover 정보를 분리하고, 전투 타겟 지정은 별도 상태로 유지했다.

UI 버튼이 눌렸다고 모든 로직을 Widget에 넣기보다 Controller나 GameMode의 검증 함수로 요청을 보내는 편이 안전하다.

GameInstance는 월드 사이에서도 살아남는다

GameInstance는 맵을 이동해도 유지된다. 메인 메뉴에서 선택한 캠페인 정보나 전역 Subsystem처럼 월드보다 긴 수명의 객체를 두기 좋다.

하지만 모든 전역 변수를 GameInstance에 몰아넣으면 거대한 관리자 클래스가 된다. UI, 저장 같은 독립된 책임은 UGameInstanceSubsystem으로 분리할 수 있다.

클래스를 고르는 기준은 편한 접근이 아니다. 데이터가 어느 월드까지 살아야 하는지, 누가 규칙을 검증해야 하는지, 입력의 주인이 누구인지부터 정해야 한다.