Runtime creation and retrieval of UObjects, Actors, Components (Actor, Scene, Primitive), Niagara effects, and DataTables.
Object & Actor creation
Name
Description
createObjectAtRuntime
Create a UObject at runtime with optional init lambda. Overloads with/without explicit UClass.
createObjectSingletonAtRuntime
Create only if ref is not already valid.
spawnActorAtRuntime
Deferred spawn with init before FinishSpawning. Supports attach to owner. Overloads with/without explicit UClass.
spawnActorSingletonAtRuntime
Spawn only if ref is not already valid.
createDatatableAtRuntime
Create a UDataTable for a struct type at runtime.
// Create a UObject
UCPerf* perf = createObjectAtRuntime<UCPerf>(this, [](UCPerf* p) { /* init */ });
// Create singleton (only if not already valid)
createObjectSingletonAtRuntime<UCPerf>(this, perf);
// Spawn actor with init before BeginPlay
AMyActor* a = spawnActorAtRuntime<AMyActor>(this, FTransform::Identity, [](AMyActor* a) {
a->MyProperty =42;
});
// Create datatable
UDataTable* dt = createDatatableAtRuntime<FMyRow>();
Component creation
Name
Description
createActorComponentAtRuntime
Create, register, and add an ActorComponent at runtime.
createSceneComponentAtRuntime
Create and attach a SceneComponent.
createPrimitiveComponentAtRuntime
Create and attach a PrimitiveComponent with collision settings.
// ActorComponent
UMyComponent* c = createActorComponentAtRuntime<UMyComponent>(myActor);
// SceneComponent attached to parent
USceneComponent* s = createSceneComponentAtRuntime<USceneComponent>(parentComponent, EComponentMobility::Movable);
// PrimitiveComponent with collision
UStaticMeshComponent* p = createPrimitiveComponentAtRuntime<UStaticMeshComponent>(
parentComponent, ECollisionEnabled::QueryAndPhysics, EComponentMobility::Movable);
Component retrieval
Name
Description
retrieveComponentNoCast
Get first component matching class or interface, returned as UActorComponent* (no cast). Tries GetComponentsByInterface first, then GetComponentByClass.
retrieveComponent
Get first component of type C on actor. Casts the result.
executeComponent
Retrieve component and execute lambda on it. Multiple overloads for class/interface combinations.
// Retrieve (no cast, returns UActorComponent*)
UActorComponent* raw = retrieveComponentNoCast<IMyInterface>(myActor);
// Retrieve (cast to C*)
UMyComponent* c = retrieveComponent<UMyComponent>(myActor);
// Execute on component
executeComponent<UMyComponent>(myActor, [](UMyComponent* c) {
c->DoSomething();
});
// Execute with interface cast
executeComponent<UMyComponent, IMyInterface>(myActor, [](UActorComponent* c, IMyInterface* i) {
i->InterfaceMethod();
});
Niagara
Name
Description
spawnNiagaraAtRuntime
Spawn Niagara effect. Overloads: attached to component, or at world location.
// Attached to actor
spawnNiagaraAtRuntime(myActor, niagaraSystem, attachComponent, FName("Socket"), FRotator::ZeroRotator, FVector(1), true);
// At world location
spawnNiagaraAtRuntime(GetWorld(), niagaraSystem, FVector(100, 200, 0));