[Unreal] Frontend UI Subsystem🎯 game engine/◽ 언리얼(unreal)2025. 9. 14. 20:16
Table of Contents
728x90
아 이제 ui만하면 만들고 있는 프로젝트가 끝이난다... 이번 달 안에 꼭 끝낼 수 있으면 좋겠다
할 수 있드아 ~!!!!!!
게임 로직 인강은 정리하면서 할 수 없었는데 이번에는 한 번 정리하면서 UI 프로젝트를 마쳐보려고 한다
1. SubSystem이 뭔지?
언리얼에는 UWorldSubsystem, UGameInstanceSubsystem, UEngineSubsystem 같은 서브시스템 개념이 있다.
- 특정 라이프사이클(월드 단위, 게임 인스턴스 단위, 엔진 전체 단위)에 따라 자동으로 생성/초기화되는 매니저 객체.
- 전역 싱글톤 대신 “월드나 인스턴스 스코프 안에서만” 살아 있는 싱글톤 느낌이라고 보면 된다.
게임 전반에 걸쳐 공통적으로 쓰이는 UI(특히 프론트엔드 화면) 관련 매니저라고 이해하면 됨.
2. subSystem 종류
Subsystem 종류 상속 베이스 라이프사이클(언제 생성/파괴) 용도
| Engine Subsystem | UEngineSubsystem | 엔진 시작 시 생성 → 엔진 종료 시 파괴 (게임 전체에서 단 하나) | 프로젝트 전역 서비스, 로그 매니저, 온라인 서비스 초기화 등 |
| Editor Subsystem | UEditorSubsystem | 에디터 실행 시 생성 → 에디터 종료 시 파괴 (게임 실행과 무관) | 툴 자동화, 커스텀 에디터 기능, 애셋 유틸리티 매니저 |
| GameInstance Subsystem | UGameInstanceSubsystem | UGameInstance가 생성될 때 같이 생성 → 게임 인스턴스 종료 시 파괴 | 전역 UI 매니저(FrontendUISubsystem), 세션 매니저, 세이브 시스템 |
| World Subsystem | UWorldSubsystem | 맵(월드)이 로드될 때 생성 → 언로드될 때 파괴 (월드마다 별도 존재) | 맵 단위 로직 매니저, 환경 시스템, 스폰 매니저 |
| LocalPlayer Subsystem | ULocalPlayerSubsystem | ULocalPlayer 생성 시 생성 → 플레이어 제거 시 파괴 (플레이어마다 하나씩) | 입력 매핑, 개별 플레이어 설정, 로컬 HUD 상태 관리 |
UFrontendUISubsystem* UFrontendUISubsystem::Get(const UObject* WorldContextObject)
{
if (GEngine)
{
// “이 함수가 어떤 **맥락(월드/오브젝트 환경)**에서 실행돼야 하는지 알려주는 기준 객체”
UWorld* World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::Assert);
return UGameInstance::GetSubsystem<UFrontendUISubsystem>(World->GetGameInstance());
}
return nullptr;
}
bool UFrontendUISubsystem::ShouldCreateSubsystem(UObject* Outer) const
{
if (!CastChecked<UGameInstance>(Outer)->IsDedicatedServerInstance())
{
TArray<UClass*> FoundClass;
GetDerivedClasses(GetClass(), FoundClass);
return FoundClass.IsEmpty();
}
return false;
}
void UFrontendUISubsystem::RegisterCreatedPrimaryLayoutWidget(UWidget_PrimaryLayout* InCreateWidget)
{
check(InCreateWidget);
CreatedPrimaryLayout = InCreateWidget;
}
3. 함수 설명
(1). UFrontendUISubsystem* UFrontendUISubsystem::Get(const UObject* WorldContextObject)
(2). bool UFrontendUISubsystem::ShouldCreateSubsystem(UObject* Outer) const
목적: 언리얼이 서브시스템을 생성해도 되는지 ? 결정하는 함수
- Outer(소유자, 즉 GameInstance)가 서버 전용이 아닐 때 (IsDedicatedServerInstance == false)
→ 즉, 클라이언트일 때만 생성 - GetDerivedClasses로 자신을 상속받은 클래스가 있는지 확인해서,
다른 파생 클래스가 있으면 생성하지 않고, 없으면 생성.
그래서 UI 서브시스템은 오직 클라이언트에서만 하나만 만들어진다는 의미.
(3) void UFrontendUISubsystem::RegisterCreatedPrimaryLayoutWidget(UWidget_PrimaryLayout* InCreateWidget)
목적: 위젯을 등록하는 함수 (메인화면 / 루트 UI 레이아웃 등등) 게임 실행시 최초로 생성되는 메인 UI 레이아웃을 기억하고 관리하는 함수.
728x90
'🎯 game engine > ◽ 언리얼(unreal)' 카테고리의 다른 글
| [Unreal] UI 세팅/구조 분석 (Set Up Common UI) (7) | 2025.09.16 |
|---|---|
| cast와 castcheck 차이 (0) | 2025.09.14 |
| [unreal] AI 시스템 구조 및 Perception (6) | 2025.07.04 |
| [unreal] 애니메이션 리타게팅 (8) | 2025.07.04 |
| [unreal] Gamemode, UE_LOG (0) | 2025.03.08 |
@핑크코냥 :: 핑크코냥
안 하는 것 보다 낫겠지
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!