Skip to main content
System decisionArchitecture

Which Subsystem Lifetime?

Choose the narrowest automatic lifetime that owns the service and its state.

UEngineSubsystemUEditorSubsystemUGameInstanceSubsystemUWorldSubsystemULocalPlayerSubsystem

Recommendation

Choose the narrowest lifetime that owns the service: Engine, Editor, Game Instance, World, or Local Player.

Compare the options

Engine Subsystem

Choose when

  • One runtime service must span every world in the process.
  • The state belongs to the engine process rather than one game session.

Tradeoffs

  • State outlives individual worlds and Game Instances.
  • World references can become stale if retained carelessly.
Blueprint
Use Get Engine Subsystem.
C++
Derive from UEngineSubsystem and use GEngine->GetEngineSubsystem<T>().

Editor Subsystem

Choose when

  • An editor-only tool or service follows the editor process.
  • The API must not exist in a packaged game.

Tradeoffs

  • The type belongs in editor-only code.
  • Runtime modules cannot depend on it.
Blueprint
Use the Editor Subsystem access nodes in editor scripting.
C++
Derive from UEditorSubsystem and use GEditor->GetEditorSubsystem<T>().

Game Instance Subsystem

Choose when

  • State spans map loads in one running game.
  • The service belongs to the game session on this machine.

Tradeoffs

  • The state does not replicate automatically.
  • It resets when the Game Instance shuts down.
Blueprint
Use Get Game Instance Subsystem.
C++
Derive from UGameInstanceSubsystem and call GameInstance->GetSubsystem<T>().

World Subsystem

Choose when

  • State belongs to one UWorld.
  • The service should reset when that world is destroyed.

Tradeoffs

  • PIE and editor sessions can contain more than one World.
  • The service does not survive map travel.
Blueprint
Use Get World Subsystem.
C++
Derive from UWorldSubsystem and call World->GetSubsystem<T>().

Local Player Subsystem

Choose when

  • Each local player needs separate state.
  • Split-screen players must not share the service instance.

Tradeoffs

  • The lifetime follows one ULocalPlayer.
  • Dedicated servers have no local players.
Blueprint
Use Get Local Player Subsystem.
C++
Derive from ULocalPlayerSubsystem and call LocalPlayer->GetSubsystem<T>().

Requirements

Runtime Subsystems are part of Engine. Editor Subsystems must stay behind editor-only module boundaries.

Example

Use a World Subsystem for a map target registry and a Local Player Subsystem for each split-screen player UI state.

Epic documentation

Related guides

Unreal Directive is free and ad-free.

If it saved you time, you can help keep it that way.

Donate