서브 시스템 | 클래스 |
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 |