Unreal) UWorld와 GetWorld()
언리얼 엔진을 사용하다 보면 GetWorld()
라는 함수를 자주 마주하게 된다.
특히 액터를 스폰하거나 월드와 관련된 작업을 할 때 필수적으로 사용되는 함수이기 때문에, 이를 제대로 이해하는 것은 필수적이다.
이 글에서는 UWorld
란 무엇인지, GetWorld()
는 왜 쓰이는지, 어떤 클래스에서 사용할 수 있는지에 대해 정리해본다.
UWorld
는 무엇인가?
UWorld
는 언리얼 엔진에서 게임 실행 컨텍스트 전체를 아우르는 클래스이다.
하나의 레벨(맵)은 하나의 UWorld
객체로 표현되며, 이 안에는 다음과 같은 요소들이 포함된다:
- 현재 로드된 레벨 정보
- 월드에 존재하는 모든 액터 목록
- 씬(Scene) 구성 정보
- 물리 및 AI 시스템
- 틱 처리, 타이머, 네트워크 처리 등
즉, UWorld
는 “이 게임이 지금 실행되고 있는 세계”를 구체적으로 나타내는 핵심 객체라고 볼 수 있다.
GetWorld()
는 왜 필요한가?
GetWorld()
는 현재 객체가 속해 있는 UWorld
에 접근하기 위한 함수이다.
언리얼 엔진의 대부분의 기능은 결국 월드 컨텍스트를 기반으로 동작하기 때문에, UWorld*
를 얻는 것은 매우 중요하다.
예를 들어, 액터를 생성하고 싶다면 다음과 같이 코드를 작성하게 된다:
UWorld* World = GetWorld();
if (World)
{
World->SpawnActor<AEnemy>(EnemyClass, Location, Rotation);
}
여기서 GetWorld()
를 통해 현재 액터 또는 컴포넌트가 속한 월드를 받아오는 것이 핵심이다.
어떤 클래스에서 GetWorld()
를 사용할 수 있는가?
GetWorld()
는 모든 클래스에서 자동으로 제공되는 것은 아니다.
언리얼의 클래스 구조에 따라 일부 클래스는 기본적으로 이를 구현하고 있으며, 다른 클래스는 수동으로 구현해야 한다.
클래스 종류 | GetWorld() 사용 가능 여부 |
설명 |
---|---|---|
AActor |
✅ 사용 가능 | 자체적으로 구현되어 있음 |
UActorComponent |
✅ 사용 가능 | GetOwner()->GetWorld() 방식으로 구현 |
UUserWidget |
✅ 사용 가능 | 위젯이 어느 월드에 배치되었는지에 따라 결정됨 |
UGameInstance |
⭕ 일부 상황에서 가능 | 기본적으로는 정의되어 있지 않지만 우회적으로 접근 가능 |
UObject (기본) |
❌ 직접 구현 필요 | GetWorld() 미정의, 명시적 구현 필요 |
만약 커스텀 UObject
에서 GetWorld()
를 사용하고 싶다면, 다음과 같이 직접 구현해야 한다:
UWorld* UMyObject::GetWorld() const
{
return CachedWorld; // 또는 외부에서 전달받은 UWorld 포인터
}
GWorld
는 무엇인가?
GWorld
는 UWorld*
타입의 전역 변수로, 현재 사용 중인 월드에 직접 접근할 수 있게 해준다.
하지만 이는 디버깅이나 특수한 테스트 상황에서만 사용해야 하며, 일반적인 게임 로직에서는 GetWorld()
를 사용하는 것이 훨씬 안전하고 권장된다.
마무리
언리얼 엔진에서의 UWorld
는 단순히 레벨을 나타내는 객체를 넘어, 게임 전반의 실행 컨텍스트를 포함한 매우 중요한 역할을 한다.
그리고 이를 얻기 위한 창구인 GetWorld()
는 언리얼 프로젝트 전반에 걸쳐 자주 쓰이는 기본 중의 기본이다.
이 구조를 제대로 이해하고 있어야만 액터를 생성하고, 씬을 조작하고, 다양한 게임 로직을 정확히 구현할 수 있게 된다.
댓글남기기