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

+ Recent posts