Name:
Global Loader
Description:
This plugin adds a global streamable manager to your project, allowing you to load FSoftObjectPath and FSoftClassPaths anywhere, without initialising a new StreamableManager locally. Full support in Native and Blueprint through a BlueprintFunctionLibrary
Target Versions:
UE4.27, UE5.0, UE5.1
Target Platforms:
Developing large games often comes with the inherent issue of having a lot of classes/assets in memory at once. If you're targetting console or other limited platforms, managing the loading of these objects is absolutely paramount.
Unreal offers an existing method of deferring this loading through the use of FSoftObjectPaths and FSoftClassPaths, but that requires reuse of handles and a streamable manager - while this approach works, its a pain to mange over a large codebase and quickly becomes unwieldy.
This plugin adds a static loader to your project, with a very very clean integration with both Native and Blueprint.
All you need to do is call the templated Load functions in the FLoader namespace, with a path and lambda callback, and you're good to go!
Features:
- Easy to use Native namespace for loading paths and classes in C++
- Blueprint function library allowing for global loads outside of native
Code Modules:
GlobalLoader - Runtime
Number of Blueprints: 0
Number of C++ Classes: 5
Network Replicated: No, system is replication agnostic
Instructions
The Global Loader can simply be used directly from the Unreal Marketplace.
To use the new static loader to load an FSoftObjectPath and FSoftClassPaths in blueprint, simply add a Load Class Async or Load Object Async node from the supplied Blueprint Function Library and pass in the appropriate parameters.


UPROPERTY'd SoftObject and SoftClass's as an example
UPROPERTY(EditDefaultsOnly)
FSoftObjectPath SoftObject;
UPROPERTY(EditDefaultsOnly)
FSoftClassPath SoftClass;
An example of the namespace being used to async load an asset in BeginPlay
#include <GlobalLoader/Public/Loader.h>
void ADebugActor::BeginPlay()
{
Super::BeginPlay();
FLoader::Load<UStaticMesh>(SoftObject, [this](UStaticMesh& InLoadedMesh)
{
UE_LOG(LogTemp, Log, TEXT("Loaded %s"), *InLoadedMesh.GetName());
});
FLoader::Load<AActor>(SoftClass, [this](const TSubclassOf<AActor>& InLoadedClass)
{
UE_LOG(LogTemp, Log, TEXT("Loaded %s"), *InLoadedClass->GetName());
});
}
Once the assets have been loaded, they can be used as you would use any other hard referenced without having the memory footprint on load.