In UTakeRecorderActorSource::EnsureObjectTemplateHasComponent() function, MakeUniqueObjectName() generates the same name of a component which CachedObjectTemplate for TakeRecorder has already had. This lead CachedObjectTemplate->AddInstanceComponent() fails because MakeUniqueObjectName(). As a result, some of Niagara FX spawning is not taken recorded in level sequencer.
More detail, when particle system is spawend for attachemnt, the core system calls MakeUniqueObjectName() to specify the unique name like NiagaraComponent_0, NiagaraComponent_1 and NiagaraComponent_2.
After that, the existence of this component is told to Take Recorder system and it tries to detect that a new component has been created. Then it calls MakeUniqueObjectName() and duplicate the component with the generated name. But this name generated by MakeUniqueObjectName() is not unique sometimes. This happens only once every two times.
To avoid this, we may repeat calling MakeUniqueObjectName until a true unique name is generated. Or just add some suffix string?
// Ensure the component name is unique within the Object Template. If there's complex spawn/destroy patterns that don't always use unique names this can // cause UniqueComponentName to become a different name than the object it's being copied from which will cause anything attached to this to fail attachment. FName UniqueComponentName = MakeUniqueObjectName(CachedObjectTemplate.Get(), InComponent->GetClass(), InComponent->GetFName()); + UniqueComponentName = *FString(UniqueComponentName.ToString() + "_TKR");
Download the attachment zip to skip Step 1 and 2.
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-208896 in the post.
1 |
Component | UE - Anim - Sequencer |
---|---|
Affects Versions | 5.3.2 |
Target Fix | 5.5 |
Fix Commit | 32170400 |
---|---|
Main Commit | 32170420 |
Created | Mar 5, 2024 |
---|---|
Resolved | Mar 12, 2024 |
Updated | May 2, 2024 |