[UE] Subsystem 종류: UEngineSubsystem, UEditorSubsystem, UGameInstanceSubsystem, ULocalPlayerSubsystem, UWorldSubsystem
글의 요약 설명 부분. 150자를 적어주세요. 글의 요약 설명 부분. 150자를 적어주세요. 글의 요약 설명 부분. 150자를 적어주세요. 글의 요약 설명 부분. 150자를 적어주세요. 글의 요약 설명 부분. 150자를 적어주세요. 글의 요약 설명 부분. 150자입니다
목차
Subsystem
Subsystem 종류
UEngineSubsystem
UEditorSubsystem
UGameInstanceSubsystem
ULocalPlayerSubsystem
UWorldSubsystem
Subsystem 타입 | Life Time | |
Engine | UEngineSubsystem | - Editor, In-game - 시작 Engine Subsystem의 Module이 로드 → Module의 Startup() 함수 반환 → Initialize() 호출 - 끝 Module의 Shutdown() 함수 반환 → DeInitialize()를 호출 |
Editor | UEditorSubsystem | - Editor 시작 시 ~ - 시작 Editor Subsystem의 Module이 로드 → Module의 Startup() 함수 반환 → Initialize() 호출 - 끝 Module의 Shutdown() 함수 반환 → DeInitialize()를 호출 |
Game Instance | UGameInstanceSubsystem | - In-game 시작 ~ In-game 종료 - 시작 GameInstance Subsystem의 Module이 로드 → Module의 Startup() 함수 반환 → Initialize() 호출 - 끝 Module의 Shutdown() 함수 반환 → DeInitialize()를 호출 |
Local Player | ULocalPlayerSubsystem | ULocalPlayer의 LifeTime (Level이 여러개면 해당 Level에 존재하는 ULocalPlayer의 LifeTime) - 시작 LocalPlayer Subsystem의 Module이 로드 → Module의 Startup() 함수 반환 → Initialize() 호출 - 끝 Module의 Shutdown() 함수 반환 → DeInitialize()를 호출 |
World | UWorldSubsystem | UWorld의 LifeTime (Level이 여러개이면 Level 별로 존재함) |
// Engine Subsystem class UMyEngineSubsystem : public UEngineSubsystem { ... }; UMyEngineSubsystem* MySubsystem = GEngine->GetEngineSubsystem<UMyEngineSubsystem>(); // Editor Subsystem class UMyEditorSubsystem : public UEditorSubsystem { ... }; UMyEditorSubsystem* MySubsystem = GEditor->GetEditorSubsystem<UMyEditorSubsystem>(); // GameInstance Subsystem class UMyGameSubsystem : public UGameInstanceSubsystem { ... }; UGameInstance* GameInstance = GetGameInstance(); UMyGameSubsystem* MySubsystem = GameInstance->GetSubsystem<UMyGameSubsystem>(); // LocalPlayer Subsystem class UMyPlayerSubsystem : public ULocalPlayerSubsystem { ... }; UGameInstance* GameInstance = GetGameInstance(); ULocalPlayer* LocalPlayer = GameInstance->GetFirstGamePlayer();; UMyPlayerSubsystem* MySubsystem = LocalPlayer->GetSubsystem<UMyPlayerSubsystem>();
참고 Link:
https://docs.unrealengine.com/5.0/ko/programming-subsystems-in-unreal-engine/
Subsystem을 사용하는 이유
Subsystem 내에 이미 존재하는 기능을 가져와서 사용하기 때문에
- 엔진 클래스 오버라이드를 피할 수 있다.
- API 추가를 피할 수 있다.
- Subsystem 기능이 Blueprint에 자동 노출되고 Blueprint로 Subsystem을 액세스할 수 있다.

UEditorSubsystem
UEditorActorSubsystem
- TArray<class > GetSelectedLevelActors()
- TArray<class > GetAllLevelActors()
UGameInstanceSubsystem을 상속받는 클래스의 생명주기(Life Time)
// GameInstance Subsystem class UMyGameSubsystem : public UGameInstanceSubsystem { ... };
위와 같이 UGameInstanceSubsystem을 상속받는 클래스가 있다면
UGameInstance 생성 → UMyGameSubsystem 인스턴스 생성
UGameInstance 초기화 → UMyGameSubsystem 인스턴스에서 Initialize()가 호출
UGameInstance 종료 → UMyGameSubsystem 인스턴스에서 Deinitialize()가 호출
Deinitialize()가 호출된 시점에서 UMyGameSubsystem 인스턴스에 대한 참조가 삭제된다. 더 이상 참조가 없으면 UMyGameSubsystem 인스턴스는 Garbage Collection 대상이 된다.
Game Instance vs. Game Instance Subsystem
Game Instance vs. Game Instance Subsystem
Game Instance | Game Instance Subsystem |
- Game 생성 시 Spawn 된다. - Game이 종료될 때까지 소멸되지 않는다. (=Game 종료 시 소멸) - 레벨 간 이동해도 계속해서 존재한다. |
- Game Instance가 생성 된 후에 생성된다. - Game Instance 종료 시 소멸되고 Garbage Collector에서 처리된다. |
게임에서 레벨을 이동하는 경우(=던전 입장, 마을 이동 등등)가 빈번히 발생한다. 또한 FPS 게임의 경우, 한 게임이 끝나고 다시 게임이 시작되는 경우가 빈번히 발생한다.
그렇게 때문에 Game이 종료될 때까지 소멸하지 않는 Game Instance보다 Game Instance Subsytem을 사용하는 것이 더 유리하다. Game Instance Subsystem을 사용하면 엔진 클래스 오버라이드를 피할 수 있고 코드의 재사용성을 높일 수 있다.
'⭐ Unreal Engine > UE 개념정리' 카테고리의 다른 글
[UE] GameMode / GameState / Player State / Player Controller / Pawn (1) | 2023.12.31 |
---|---|
[UE] BindWidget, BindWidgetOptional, BindWidgetAnim (0) | 2023.12.04 |
[UE] 빌드 환경설정(Build Mode): Debug, DebugGame, Development, Shipping (0) | 2023.11.15 |
[Unreal] 리플리케이션 (Replication), Remote Procedure Call (RPC) (0) | 2023.11.08 |
[Unreal] 언리얼의 서버모델: 리슨서버, 데디케이티드 서버, 리플리케이션(Replication) (0) | 2023.09.15 |
댓글
이 글 공유하기
다른 글
-
[UE] GameMode / GameState / Player State / Player Controller / Pawn
[UE] GameMode / GameState / Player State / Player Controller / Pawn
2023.12.31 -
[UE] BindWidget, BindWidgetOptional, BindWidgetAnim
[UE] BindWidget, BindWidgetOptional, BindWidgetAnim
2023.12.04 -
[UE] 빌드 환경설정(Build Mode): Debug, DebugGame, Development, Shipping
[UE] 빌드 환경설정(Build Mode): Debug, DebugGame, Development, Shipping
2023.11.15 -
[Unreal] 리플리케이션 (Replication), Remote Procedure Call (RPC)
[Unreal] 리플리케이션 (Replication), Remote Procedure Call (RPC)
2023.11.08
댓글을 사용할 수 없습니다.