Programming Subsystems

Subsystems were introduced into Unreal Engine 4.22 and provide an elegant method for creating gameplay managers of any kind.

Updated about 4 years ago

Introduction

Subsystems were introduced into Unreal Engine 4.22 and provide an elegant method for creating managers of any kind.

  • It minimizes the need to put a lot of "manager code" into extended classes of UGameInstance, AWorldSettings, AGameModeBase. It's common to end up with many various systems in a single class, which is messy and more difficult to maintain over time.

  • Instead, now we can use automatically instanced objects called subsystems. Engine creates an instance of this object together with its "parent" object, i.e. Game Instance, World. You don't need to store a pointer to it anywhere.

  • You can have as many subsystems for a given "parent" as you want, i.e Audio Manager and UI Manager as Game Instance subsystems, Weather Manager and Monster Spawn as World subsystems.

Subsystem Lifecycle

A Subsystem contains the lifecycle methods Initialize and Deinitialize, which will be invoked automatically and its lifetime will be determined by the engine class that it was inherited from.

Subsystem | Inherits from | Engine version

------------- | ---------------------- | --------------

Engine | UEngineSubsystem | 4.22

Editor | UEngineSubsystem | 4.22

Game Instance | UGameInstanceSubsystem | 4.22

Local Player | ULocalPlayerSubsystem | 4.22

World | UWorldSubsystem | 4.24

Accessing Subsystems

A Subsystem may be referenced from a Blueprint Graph in the same way a variable is referenced.

Official Resources