반응형
Subsystem
서브시스템 | 클래스 |
Engine | UEngineSubsystem 클래스 |
Editor | UEditorSubsystem 클래스 |
GameInstance | UGameInstanceSubsystem 클래스 |
LocalPlayer | ULocalPlayerSubsystem 클래스 |
World | UWorldSubsystem 클래스 |
예를 들어 이 베이스 클래스에서 파생된 클래스를 생성하면:
class UMySubsystem : public UGameInstanceSubsystem
그 결과는 다음과 같습니다.
- UGameInstance 생성 이후, UMyGamesSubsystem 라는 인스턴스 역시 생성됩니다.
- UGameInstance 초기화 시, 서브시스템에서 Initialize() 가 호출됩니다.
- UGameInstance 종료 시, 서브시스템에서 Deinitialize() 가 호출됩니다.
- 이 시점에서 서브시스템에 대한 참조가 삭제되고 더이상 참조가 없으면 서브시스템은 가비지 컬렉션 됩니다.
다음과 같이 Subsystem을 가져와서 사용합니다.
UMySubsystem* MySubsystem = GetGameInstance()->GetSubsystem<UMySubsystem>();
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 = ...;
UMyGameSubsystem* MySubsystem = GameInstance->GetSubsystem<UMyGameSubsystem>();
LocalPlayer Subsystem
class UMyPlayerSubsystem : public ULocalPlayerSubsystem { ... };
ULocalPlayer* LocalPlayer = ...;
UMyPlayerSubsystem * MySubsystem = LocalPlayer->GetSubsystem<UMyPlayerSubsystem>();
Subsystem 사용시 라이프타임에 대한이해가 필요하며 관련해서는 다음글을 참고해 주세요.
[게임 개발/Unreal Engine] - [UE] Subsystem 활용한 Unreal 스타일 Singleton
서브시스템을 사용하는 이유
프로그래밍 서브시스템을 사용하는 데에는 다음과 같은 몇 가지 이유가 있습니다.
- 프로그래밍 시간이 절약됩니다.
- 엔진 클래스 오버라이드를 피할 수 있습니다.
- 이미 바쁜 클래스에 API 추가를 피할 수 있습니다.
- 사용자에게 친숙한 유형의 노드를 통해 블루프린트로 액세스할 수 있습니다.
- 에디터 스크립팅이나 테스트 코드 작성을 위해 Python 스크립트에 액세스할 수 있습니다.
- 코드베이스의 모듈성과 일관성을 제공합니다.
서브시스템은 플러그인을 만들 때 특히 유용합니다. 플러그인 작동에 필요한 코드 관련 지침이 없어도 됩니다. 사용자는 플러그인을 게임에 추가하기만 하면, 플러그인이 언제 인스턴싱 및 초기화될 지 정확히 알 수 있습니다. 따라서 UE4 에 제공되는 API 및 기능을 사용하는 데만 중점을 둘 수 있습니다.
https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/Subsystems/
'게임 개발 > Unreal Engine 기본' 카테고리의 다른 글
[UE5] stat unit (2) | 2023.03.24 |
---|---|
[UE] Unreal Egnine 쿠킹 By the Book, On the Fly (0) | 2023.03.20 |
[UE4] Unreal Engine 게임 플로우 (0) | 2022.04.22 |
[UE4] UClass, UFunction, UProperty, UEnum UInterface 메타데이터 지정자 (0) | 2022.02.16 |
[UE4] Assertion - DO_CHECK, DO_GUARD_SLOW, DO_ENSURE (0) | 2022.02.16 |