| 서브 시스템 | 클래스 | 
| Engine | UEngineSubsystem | 
| Editor | UEditorSubsystem | 
| GameInstance | UGameInstanceSubsystem | 
| LocalPlayer | ULocalPlayerSubsystem | 
| World | UWorldSubsystem | 
UGameInstanceSubsystem 사용 방법
/*
 * 1. UGameInstance 생성 이후, UMyGameSubsystem 이 생성됨.
 * 2. UGameInstance 초기화 시, 서브시스템에서 Initialize()가 호출됨.
 * 3. UGameInstance 종료 시, 서브시스템에서 Deinitialize()가 호출됨.
 * 4. 이 시점에서 서브시스템에 대한 참조가 삭제되고 더이상 참조가 없으면 가비지 컬렉션됨.
 */
 
class UMyGameSubsystem : public UGameInstanceSubsystem { ... };
// 호출 방법
UGameInstance* GameInstance = GetGameInstance();
UMyGameSubsystem* MySubsystem = GameInstance->GetSubsystem<UMyGameSubsystem>();
-
[Engine Subsystem]
class UMyEngineSubsystem : public UEngineSubsystem { ... };
// 호출 방법
UMyEngineSubsystem MySubsystem = GEngine->GetEngineSubsystem<UMyEngineSubsystem>();
[Editor Subsystem]
class UMyEditorSubsystem : public UEditorSubsystem { ... };
// 호출 방법
UMyEditorSubsystem MySubsystem = GEditor->GetEditorSubsystem<UMyEditorSubsystem>();
[LocalPlayer Subsystem]
class UMyPlayerSubsystem : public ULocalPlayerSubsystem { ... };
// 호출 방법
ULocalPlayer* LocalPlayer = ...;
UMyPlayerSubsystem * MySubsystem = LocalPlayer->GetSubsystem<UMyPlayerSubsystem>();
Subsystem 을 상속받아 사용하는 이유는..
프로그래밍 시간이 절약되고 엔진 클래스 오버라이드를 피할 수 있음.
블루프린트에 자동 노출되어
UGameInstance 보다 UGameInstanceSubsystem을 상속받는게 훨씬 가벼울 수 있음.
UGameInstance 과 동일한 라이프타임을 가지고 있어서 생성자, Initialize, Deinitialize 함수들만 넣어면 됨.
*싱글톤을 만들때 사용하자.
'::protected > 언리얼4&5' 카테고리의 다른 글
| Optimization (0) | 2023.07.05 | 
|---|---|
| CoreRedirects (0) | 2023.07.03 | 
| 콘솔 명령어 / 콘솔 변수 (0) | 2023.06.29 | 
| Niagara.. (0) | 2023.06.27 | 
| 메모리 관리 (0) | 2022.12.26 |