[Unreal Engine] Subsystem의 유연한 초기화
Subsystem의 초기값을 어떻게 유연하게 만들까요? Unreal Engine에서는 싱글턴(단일 객체)을 보장할 수 있는 Subsystem 클래스를 제공합니다. 각종 라이프 사이클에 따른 EngineSubsystem, EditorSubsystem, GameInstanceSubsystem, WorldSubsystem 등이 존재합니다. 문제는 게임에서 활용되는 Subsystem들에 대한 초기화 방법을 제공하는데 있어 유저 친화적인 방법이 존재하지 않는다는 것인데요. 예를 하나 들어봅시다: 게임의 UI를 중앙집중적으로 관리하기 위해 UIManager라는 GameInstanceSubsystem 자식 클래스를 구현하였고, 모든 UI를 담을 최상위 부모 UI인 Root Layout이 User Widget Blueprint로 만들어져있다고 생각해봅시다. 따라서 UIManager는 게임 시작 시 해당 User Widget을 자신의 Root Layout으로서 Viewport에 추가하고 싶을 것입니다. 하지만, "어떤 User Widget이 Root Layout용으로 만들어진 User Widget Blueprint인가?"를 어떻게 결정해야 하는지에 대해 의문이 생길 수 있습니다. 첫째, 그냥 하드코딩 하기. static ConstructorHelpers::FClassFinder<UUserWidget> RootLayoutClassFinder(TEXT( "/Game/UI/MyRootLayoutAsset" )); RootLayoutClass = RootLayoutClassFinder.Class 간단하게는, C++ 코드 상에서 경로를 하드코딩해 특정 경로에 있는 User Widget 에셋을 로드하여 Root Layout으로 사용하게끔 할 수도 있겠죠. 하지만 이것은 유연하지 않고, 에디터를 사용하는 입장에서 별로 명시적이지도 않습니다. (C++ 코드를 봐야하니까요) 어딘가에는 적어놓아야겠...