::protected/언리얼4&5
Subsystem - UGameInstanceSubsystem..
해맑은욱
2023. 6. 30. 09:08
서브 시스템 | 클래스 |
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 함수들만 넣어면 됨.
*싱글톤을 만들때 사용하자.