Unreal Engine

[Unreal] 전역 객체 정리 + Subsystem 이해하기

바다랑이 2025. 4. 28. 15:47

Unreal Engine을 처음 배우다 보면, 마치 Unity의 GameManager.Instance처럼 어디서든 접근 가능한 글로벌 객체들이 있다는 걸 알게 됩니다.

대표적으로 GetWorld(), GetGameInstance() 같은 것들이 있죠.
이 글에서는 Unreal에서 초기부터 기본 제공되는 글로벌 객체와 함수들을 정리해보고, 마지막으로 Subsystem에 대해서도 정리해 보겠습니다.


글로벌 객체와 함수들

 

GetWorld

현재 이 객체가 속한 UWorld를 가져옵니다.

객체가 아무 World에 속하지 않는다면, nullptr를 return합니다.

Unity의 SceneManager.GetActiveScene() 과 비슷합니다.

 

GetGameInstance()

게임 전체를 통틀어 유지되는 글로벌 매니저 입니다.

Unity의 Singleton GameManager.Instance 와 비슷합니다.

Unity는 GameManager를 만들어야 하지만, Unreal에는 기본으로 제공됩니다.

 

GetController()

Player의 InputManager를 가져옵니다.

Unity의 GetComponent<PlayerInput()> 과 비슷합니다.

 

GetPlayerController()

특정 플레이어의 컨트롤러를 가져옵니다.

Unity의 PlayerInputManager.instance.GetPlayerController(playerIndex) 와 비슷합니다.

 

GEngine

전역 접근 가능한 시스템 객체입니다. Debug를 찍기 위해 주로 사용합니다.

실제 인스턴스가 살아있는지 확인하는 것이 좋습니다. (if (GEngine) {})

Unity의 Application 과 비슷합니다.


Subsystem이란?

Subsystem은 Unreal Engine에서 특정 범위에서 동작하는 글로벌 매니저 클래스입니다.

특정 기능을 모듈화해서 관리하기 위해 사용합니다.

  • 특정 라이프사이클 동안 자동으로 생성되고 파괴됩니다.
  • 언제든지 쉽게 접근할 수 있도록 설계되어 있습니다.
  • Input 관리, 세션 관리, 데이터 저장 등 "프로젝트 전역 기능"을 깔끔하게 모듈화할 때 사용합니다.

기본 제공되는 Subsystem은 다음과 같습니다.

  • UGameInstanceSubsystem: 게임 전체에서 살아있는 글로벌 서브시스템
  • UWorldSubsystem: 월드(맵) 단위로 동작하는 서브시스템
  • ULocalPlayerSubsystem: 특정 로컬 플레이어 단위로 동작하는 서브시스템
  • UEngineSubsystem: 엔진 전체에서 살아있는 전역 서브시스템

Plugin이란?

Unreal Engine에서 Plugin(플러그인) 이란,
특정 기능을 독립적인 모듈로 분리해놓은 것입니다.

플러그인은 프로젝트나 엔진에 직접 코드를 추가하지 않고,
필요할 때 켜고 끌 수 있는 형태로 기능을 주입할 수 있습니다.

  • 독립된 기능 단위로 관리할 수 있음.
  • 코드, 리소스, 설정 파일 등을 묶어서 하나의 패키지로 만들 수 있음.
  • 플러그인만 꺼도 관련 기능을 통째로 제거할 수 있음.
  • 다른 프로젝트에도 쉽게 재활용할 수 있음.

Unity의 CineMachine같은 Package와 유사하다고 보면 됩니다.

 

Plugin 안에 Subsystem을 넣을 수도 있습니다.

예를 들어, MultiplayerSessionsPlugin이라는 플러그인 안에 UMultiplayerSessionsSubsystem을 넣어서

  • 플러그인을 켜면 세션 기능이 활성화되고
  • 플러그인을 끄면 세션 기능이 아예 프로젝트에서 사라지게

이렇게 설계할 수 있습니다.