Programming Subsystems
- "automatically instanced classes with managed lifetimes"; extension points with Blueprint and Python exposure, avoiding modifying or overriding engine classes.
- Listed lifetimes: Engine (UEngineSubsystem), Editor (UEditorSubsystem), GameInstance (UGameInstanceSubsystem), LocalPlayer (ULocalPlayerSubsystem).
- GameInstance example: after UGameInstance created, subsystem instance created; on init Initialize(); on shutdown Deinitialize(); then reference dropped and GC'd if no more references.
- Reasons: save time, avoid overriding engine classes, avoid adding API to busy class, typed Blueprint nodes (no casting), Python access, modularity; especially useful for plugins.
- Engine/Editor subsystems Initialize after module Startup() returns, Deinitialize after Shutdown(); accessed GEngine->GetEngineSubsystem
(), GEditor->GetEditorSubsystem (); GameInstance->GetSubsystem (); LocalPlayer->GetSubsystem (). - Example UMyGamesStatsSubsystem instead of bloating a custom UGameInstance; Initialize(FSubsystemCollectionBase&), Deinitialize().
- World subsystem (from Python API 5.8 class WorldSubsystem): "Base class for auto instanced and initialized systems that share the lifetime of a UWorld"; FWorldSubsystemCollection handles calling PostInitialize and OnWorldBeginPlay for already initialized worlds. (Engine module, WorldSubsystem.h)