나만의 작은 도서관
[TIL][C++] 251103 MMO 서버 개발 128일차: [언리얼] 월드(UWorld)와 레벨(ULevel)의 관계 재정리, 월드(UWorld)와 게임 인스턴스와의 관계는 종속 관계인가? 본문
Today I Learn
[TIL][C++] 251103 MMO 서버 개발 128일차: [언리얼] 월드(UWorld)와 레벨(ULevel)의 관계 재정리, 월드(UWorld)와 게임 인스턴스와의 관계는 종속 관계인가?
pledge24 2025. 11. 3. 23:55주의사항: 해당 글은 일기와 같은 기록용으로, 다듬지 않은 날것 그대로인 글입니다.
[언리얼] 월드(UWorld)와 레벨(ULevel)의 관계 재정리
월드(UWorld)
- 게임이 실행되는 전체 환경과 관리 시스템. 게임 플레이를 진행하는 월드는 항상 하나만 존재한다.
레벨(ULevel)
- 월드를 구성하는 실제 환경 데이터의 집합. Map과 같은 개념이며, 배치된 모든 오브젝트(Ex. 캐릭터, 카메라, 조명 등)를 포함하고 관리한다.
월드 == 레벨? ⇒ X
- 월드는 레벨이 아니다. 에디터에서 볼 때는 이 둘의 역할이 비슷해 보이지만, 그건 우리가 월드에 하나의 레벨만 운영했기 때문이다.
- 월드는 게임 실행 중 실제로 동작하는 레벨들의 집합과 그 상태를 관리하는 최상위 객체이다. 즉, 여러 개의 레벨을 가질 수 있다는 것. 요약하자면,
- Level = 맵
- World = 여러 레벨로 구성되어 있는 실제 세계(또는 실행 환경)
월드가 가지는 레벨의 구조

- 월드는 한 개의 Persistent Level(기본 레벨)과 여러 개의 Sub Level(스트리밍 레벨)을 가진다.
Persistent Level과 Sub Level이란?
- Persistent Level
- 월드가 로드될 때 가장 먼저 로드되고 항상 메모리에 유지되는 기본 레벨.
- 월드의 중심 허브 역할을 하는 레벨이며, GameMode, GameState, PlayerStart 등을 관리한다.
- Sub-Level
- Persistent Level에 추가로 로드되는 레벨.
- 대규모 월드를 구성하기 위해 사용하며, 지형, 건물, 특정 구역의 액터 등 특정 지역 또는 데이터를 분리하여 관리하기 위해 사용한다.
- 로드 / 언로드에 자유로우며, 반드시 Persistent Level에 종속되어 로드되어야 한다.
Persistent Level과 Sub Level 구분법
- Sub Level은 사용자가 직접 추가해야 생긴다. 따라서, 새로운 Level 파일(.umap)을 생성했다면 해당 Level 파일은 Persistent Level만 있고 Sub Level은 없다.
[언리얼] 월드(UWorld)와 게임 인스턴스와의 관계는 종속 관계인가?
게임인스턴스(UGameInstance)
- 게임인스턴스(UGameInstance)는 게임이 시작되어 종료될 때까지 메모리에 단 하나만 존재하는 싱글톤(Singleton) 객체이다.
월드(UWorld)는 Persistent Level이 전환될 때마다 파괴된다.
- 게임플레이시 진행 중인 월드는 유일하게 존재하지만, 완전한 레벨 전환(Persistent Level)의 전환이 발생하면, 해당 월드는 파괴된다.
- 즉, 게임을 하는 도중 월드 객체는 계속 파괴되고 생성되고를 반복한다.
결론적으로 게임인스턴스와 월드는 종속관계가 아니다.
- 이 둘은 직접적인 종속 관계가 아니다. 다만, 게임인스턴스가 상위 개념이고, 월드는 하위 개념이므로, 월드가 게임인스턴스에 종속되어 존재하기는 한다.
- 간단하게 생각하면 “게임인스턴스가 월드매니저 역할을 한다”라고 할 수 있다.
서로가 서로를 알 수 있는 맥락이다.
- 게임인스턴스는 현재 실행 중인 월드를,
- 월드는 게임인스턴스를 알 수 있다.
GameInstance::GetWorld();
GetWorld()->GetGameInstance();
// 월드에 배치된 액터들도 전역 객체인 게임인스턴스에 접근 가능
AActor::GetGameInstance()
- 대충 World에 종속되는 모든 객체들은 GameInstance에 접근 가능하다고 보면 된다.