UE 5.6 Crash when opening scene containing Actors with MassAgentComponent

I just upgraded to 5.6 today and I’m experiencing a crash when opening scenes that contains Actors with MassAgentComponent.

As soon as scene opens the engine crashes with this callstack:

|>|[Inline Frame] UnrealEditor-MassEntity.dll!TMapBase<UScriptStruct const *,int,FDefaultSetAllocator,TDefaultMapHashableKeyFuncs<UScriptStruct const *,int,0>>::FindChecked(const UScriptStruct *) Line 729|C++|
|---|---|---|
| |UnrealEditor-MassEntity.dll!FMassArchetypeData::SetFragmentData(TArrayView<FMassArchetypeEntityCollection::FArchetypeEntityRange const ,int> EntityRangeContainer, const FInstancedStruct & FragmentSource) Line 447|C++|
| |UnrealEditor-MassEntity.dll!FMassEntityManager::BatchSetEntityFragmentValues(TArrayView<FMassArchetypeEntityCollection const ,int> EntityCollections, TArrayView<FInstancedStruct const ,int> FragmentInstanceList) Line 1780|C++|
| |UnrealEditor-MassSpawner.dll!UMassSpawnerSubsystem::DoSpawning(const FMassEntityTemplate & EntityTemplate, const int NumToSpawn, FConstStructView SpawnData, TSubclassOf<UMassProcessor> InitializerClass, TArray<FMassEntityHandle,TSizedDefaultAllocator<32>> & OutEntities) Line 139|C++|
| |UnrealEditor-MassSpawner.dll!UMassSpawnerSubsystem::SpawnEntities(const FMassEntityTemplate & EntityTemplate, const unsigned int NumberToSpawn, TArray<FMassEntityHandle,TSizedDefaultAllocator<32>> & OutEntities) Line 63|C++|
| |UnrealEditor-MassActors.dll!UMassAgentSubsystem::HandlePendingInitialization() Line 328|C++|

Same happens with a dev build with the same callstack

FDebug::CheckVerifyFailedImpl2()
FMassArchetypeData::SetFragmentData()
!FMassEntityManager::BatchSetEntityFragmentValues()
UMassSpawnerSubsystem::DoSpawning()
UMassSpawnerSubsystem::SpawnEntities()
UMassAgentSubsystem::HandlePendingInitialization()
TBaseUObjectMethodDelegateInstance<0,UMassAgentSubsystem,void __cdecl(float),FDefaultDelegateUserPolicy,enum EMassProcessingPhase>::ExecuteIfSafe()
IslesOfKrom!TMulticastDelegate<void __cdecl(float),FDefaultDelegateUserPolicy>::Broadcast()

From what I understand there seems to be discrepancy between the archetype and the data passed since it crashes when trying to find an absent fragment in the archetype.

I have no idea how I can fix this issue and I would gladly welcome some help in order to fix this issue.

Thanks in advance.

1 Like

I manage to reproduce the issue in an empty project. Using only 2 actors that have each one specific traits. The traits are very simple and look like the code below:
Simply having one bp with a massAgentComponent and an EC config sporting the first trait and a second Bp with also a massAgentComponent and a second EC Config sporting the secont trait is enough to crash the engine when the scene opens.

USTRUCT()
struct FFragment1 : public FMassFragment
{
	GENERATED_BODY()

	UPROPERTY()
	int32 Counter;
};

USTRUCT()
struct FFragment2 : public FMassFragment
{
	GENERATED_BODY()

	UPROPERTY()
	int32 Counter;

	UPROPERTY()
	FName Name;
};

USTRUCT()
struct FFragment3 : public FMassFragment
{
	GENERATED_BODY()

	UPROPERTY()
	int32 Counter;

	UPROPERTY()
	float Perc;
};

USTRUCT()
struct FTag1 : public FMassTag
{
	GENERATED_BODY()
};

UCLASS()
class MYPROJECT2_API UTraits1 : public UMassEntityTraitBase
{
	GENERATED_BODY()

public:

	virtual void BuildTemplate(FMassEntityTemplateBuildContext& BuildContext, const UWorld& World) const override;
};

UCLASS()
class MYPROJECT2_API UTraits2 : public UMassEntityTraitBase
{
	GENERATED_BODY()

public:

	virtual void BuildTemplate(FMassEntityTemplateBuildContext& BuildContext, const UWorld& World) const override;
};

void UTraits1::BuildTemplate(FMassEntityTemplateBuildContext& BuildContext, const UWorld& World) const
{
	FFragment1 Fragment1;
	Fragment1.Counter = 0;
	BuildContext.AddFragment(FConstStructView::Make(Fragment1));

	FFragment2 Fragment2;
	Fragment2.Counter = 0;
	Fragment2.Name = FName{TEXT("Traits1")};
	BuildContext.AddFragment(FConstStructView::Make(Fragment2));
}

void UTraits2::BuildTemplate(FMassEntityTemplateBuildContext& BuildContext, const UWorld& World) const
{
	BuildContext.RequireFragment<FMassActorFragment>();
	BuildContext.AddTag<FTag1>();

	FFragment2 Fragment3;
	BuildContext.AddFragment(FConstStructView::Make(Fragment3));
}

Hey!

This is indeed a bug. We have a fix in review currently, but it will not be available in a launcher build until 5.7. Once the fix is committed, it will be on our public UE5 GitHub main branch. I can send a link to the GitHub commit once it has mirrored over if you build from source.

-James

Hello James,

Thanks a lot for the follow up on this.
and yes, I would be really interested in having the github link when it is available.

Cheers,
Lolo.

This has been committed. Here is a link to the commit on our public GitHub: https://github.com/EpicGames/UnrealEngine/commit/39120795f693bcdbb59f72e5ef640a3b46ed2b3c

I believe this should cover the crash you have been seeing.

-James

1 Like