Programming Subsystems - October 17 - Live from HQ

WHAT
Subsystems in Unreal Engine are automatically instanced classes with managed lifetimes. These classes provide easy to use extension points, where the programmers can get Blueprint and Python exposure right away while avoiding the complexity of modifying or overriding engine classes. This week, lead programmer Chris Gagnon will discuss what Subsystems are, how to use them, their benefits, and the considerations you should keep in mind.

WHEN
Thursday, October 17 @ 2:00PM ET - Countdown

WHERE
Twitch
Youtube

RESOURCES
Programming Subsystems Documentation
Project Files

WHO
Chris Gagnon - Lead Programmer, Editor
Victor Brodin - Community Manager - @victor1erp](http://twitter.com/victor1erp)

ARCHIVE
Programming Subsystems | Live from HQ | Inside Unreal - YouTube

2 Likes

Excellent choice for topic. Thank you!

why u make tutorial for total beginners?

Very kewl! Should be a good one.

@Bombaholic Epic actually does have free online training through their training portal via Unreal Online Learning - Unreal Engine

When and where the stream will be online to watch it when miss the live stream? I looked at twich and youtube but do not found it.

EDIT: I found it on twitch, but wondering why it has a completely different name :wink:

You can find the project files here: https://forums.unrealengine.com/unreal-engine/announcements-and-releases/asset-sharing/1678157

Thanks Victor and Chris - Useful - timely - good interchange - More like this on UE4 coding strategies

Chris Would it be possible for you to elaborate more on:

  • how you differentiate these subsystems from say the Physics or rendering subsystems
  • what would be the most appropriate uses for these types of subsystems and
  • could you list the top subsystems that you would convert/refactor from BP or component implementations ?

hi does anybody know why there isn’t a GameModeSubSystem ? We placed a lot of code into the GameMode, because its lifetime was supposed to stop when leaving the map, and a subsystem over there would be great to have

Just finished watching this. Great talk. I really like it when the programmers roughly address various use cases from the users like that. Really helps give context.

I think one of the main TLDR takeaways from this is to go for a blueprint library when stateless and a subsystem when stateful.

Thanks for the Tutorial.

I do have a question about Subsystems and Configuration files. I went ahead and created a Menu Extender to open the my Subsystem properties to allow for editing config properties. However, the SaveConfig and LoadConfig methods use different PathNames. The LoadConfig will use the standard [/Script/{ModuleName}.{SubsystemName}], but the SaveConfig uses [None.{SubsystemName}]. Is there a way to get these to match?

To note, I’m using this method to drive an in game save settings.

I know a different way to drive subsystem configurations with a WorldSettings, but I figured the config would be easier.

Hi, I’ve been attempting to create a subsystem from a plugin, but running into issues with InitializeDependency. It’s complaining that I shouldn’t be calling this function from outside Initialize… but, I’m not. I am calling it from within Initialize.

I’ve tried doing a build in VS22 with unreal closed, and when I open the editor I still get this complaint.

There seems to be some sort of bug with the subsystem collection code that initializes the subsystems where it forgets that it itself is initializing the subsystem.
Here’s the complaint from the output log.

UE4.27.2

LogOutputDevice: Error: === Handled ensure: ===
LogOutputDevice: Error: Ensure condition failed: bPopulating [File:D:/Build/++UE4/Sync/Engine/Source/Runtime/Engine/Private/Subsystems/SubsystemCollection.cpp] [Line: 169]
LogOutputDevice: Error: InitializeDependancy() should only be called from System USubsystem::Initialization() implementations.
LogOutputDevice: Error: Stack: 
LogOutputDevice: Error: [Callstack] 0x00007ffee1ef1d59 UE4Editor-Engine.dll!DispatchCheckVerify<bool,<lambda_1e4bb3af60367dd38a263c797571e755> >() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Core\Public\Misc\AssertionMacros.h:164]
LogOutputDevice: Error: [Callstack] 0x00007ffee15b17fa UE4Editor-Engine.dll!FSubsystemCollectionBase::InitializeDependency() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Engine\Private\Subsystems\SubsystemCollection.cpp:170]
LogOutputDevice: Error: [Callstack] 0x00007ffea8f5729c UE4Editor-MachtModRuntime.dll!UUGCManagerSubsystem::Initialize() [G:\VRCrossTactical\Plugins\MachtModRuntime\Source\MachtModRuntime\Private\UGCManagerSubsystem.cpp:18]
LogOutputDevice: Error: [Callstack] 0x00007ffee158748a UE4Editor-Engine.dll!FSubsystemCollectionBase::AddAndInitializeSubsystem() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Engine\Private\Subsystems\SubsystemCollection.cpp:210]
LogOutputDevice: Error: [Callstack] 0x00007ffee15872c1 UE4Editor-Engine.dll!FSubsystemCollectionBase::AddAllInstances() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Engine\Private\Subsystems\SubsystemCollection.cpp:231]
LogOutputDevice: Error: [Callstack] 0x00007ffee1588095 UE4Editor-Engine.dll!FSubsystemModuleWatcher::AddClassesForModule() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Engine\Private\Subsystems\SubsystemCollection.cpp:324]
LogOutputDevice: Error: [Callstack] 0x00007ffee15b6269 UE4Editor-Engine.dll!FSubsystemModuleWatcher::OnModulesChanged() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Engine\Private\Subsystems\SubsystemCollection.cpp:270]
LogOutputDevice: Error: [Callstack] 0x00007ffee15a2e64 UE4Editor-Engine.dll!TBaseStaticDelegateInstance<void __cdecl(FName,enum EModuleChangeReason),FDefaultDelegateUserPolicy>::ExecuteIfSafe() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Core\Public\Delegates\DelegateInstancesImpl.h:731]
LogOutputDevice: Error: [Callstack] 0x00007ffee78d1af8 UE4Editor-Core.dll!TMulticastDelegate<void __cdecl(FName,enum EModuleChangeReason),FDefaultDelegateUserPolicy>::Broadcast() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Core\Public\Delegates\DelegateSignatureImpl.inl:955]
LogOutputDevice: Error: [Callstack] 0x00007ffee78f1665 UE4Editor-Core.dll!FModuleManager::LoadModuleWithFailureReason() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Core\Private\Modules\ModuleManager.cpp:547]
LogOutputDevice: Error: [Callstack] 0x00007fff3b136433 UE4Editor-Projects.dll!FModuleDescriptor::LoadModulesForPhase() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Projects\Private\ModuleDescriptor.cpp:643]
LogOutputDevice: Error: [Callstack] 0x00007fff3b14caba UE4Editor-Projects.dll!FPluginManager::TryLoadModulesForPlugin() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Projects\Private\PluginManager.cpp:1450]
LogOutputDevice: Error: [Callstack] 0x00007fff3b1361b0 UE4Editor-Projects.dll!FPluginManager::LoadModulesForEnabledPlugins() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Projects\Private\PluginManager.cpp:1525]
LogOutputDevice: Error: [Callstack] 0x00007ff66d5631c6 UE4Editor.exe!FEngineLoop::Init() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Launch\Private\LaunchEngineLoop.cpp:4045]
LogOutputDevice: Error: [Callstack] 0x00007ffee6abdb50 UE4Editor-UnrealEd.dll!EditorInit() [D:\Build\++UE4\Sync\Engine\Source\Editor\UnrealEd\Private\UnrealEdGlobals.cpp:94]
LogOutputDevice: Error: [Callstack] 0x00007ff66d580e3b UE4Editor.exe!GuardedMain() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Launch\Private\Launch.cpp:154]
LogOutputDevice: Error: [Callstack] 0x00007ff66d5810ba UE4Editor.exe!GuardedMainWrapper() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:137]
LogOutputDevice: Error: [Callstack] 0x00007ff66d5840dd UE4Editor.exe!LaunchWindowsStartup() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:273]
LogOutputDevice: Error: [Callstack] 0x00007ff66d595984 UE4Editor.exe!WinMain() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:320]
LogOutputDevice: Error: [Callstack] 0x00007ff66d59853a UE4Editor.exe!__scrt_common_main_seh() [d:\agent\_work\5\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288]
LogOutputDevice: Error: [Callstack] 0x00007fff748c7034 KERNEL32.DLL!UnknownFunction []
LogOutputDevice: Error: [Callstack] 0x00007fff75aa2651 ntdll.dll!UnknownFunction []

@VictorLerp btw the URLs dont work anymore mentioned on the Youtube description for the forum and transcript

https://forums.unrealengine.com/unreal-engine/events/1673854
https://epicgames.ent.box.com/s/bgf6v7seq0rykfn9prceonbt1oibdsph

and also doesnt work the Project File in this thread

:frowning: