void UInstancedStaticMeshComponent::GetNavigationPerInstanceTransforms(const FBox& AreaBox, TArray<FTransform>& InstanceData) const { const FBox InstanceBounds = GetInstanceNavigationBounds(); if (InstanceBounds.IsValid) { const FBox LocalAreaBox = AreaBox.InverseTransformBy(GetComponentTransform()); for (const auto& InstancedData : PerInstanceSMData) { const FTransform InstanceToComponent(InstancedData.Transform); if (!InstanceToComponent.GetScale3D().IsZero()) { const FBoxSphereBounds TransformedInstanceBounds = InstanceBounds.TransformBy(InstancedData.Transform); if (LocalAreaBox.Intersect(TransformedInstanceBounds.GetBox())) { InstanceData.Add(InstanceToComponent*GetComponentTransform()); } } } } }
this can crash if the underlying data is modified on the game thread
<CallStack>DominanceTOE!UE::Math::TTransform<double>::SetFromMatrix() [C:\Builds\DominanceBuild\Engine\Source\Runtime\Core\Public\Math\TransformVectorized.h:1250]
DominanceTOE!UInstancedStaticMeshComponent::GetNavigationPerInstanceTransforms() [C:\Builds\DominanceBuild\Engine\Source\Runtime\Engine\Private\InstancedStaticMesh.cpp:5461]
DominanceTOE!TBaseUObjectMethodDelegateInstance<1,UInstancedStaticMeshComponent const ,void __cdecl(UE::Math::TBox<double> const &,TArray<UE::Math::TTransform<double>,TSizedDefaultAllocator<32> > &),FDefaultDelegateUserPolicy>::Execute() [C:\Builds\DominanceBuild\Engine\Source\Runtime\Core\Public\Delegates\DelegateInstancesImpl.h:651]
DominanceTOE!FRecastTileGenerator::AppendModifier() [C:\Builds\DominanceBuild\Engine\Source\Runtime\NavigationSystem\Private\NavMesh\RecastNavMeshGenerator.cpp:2486]
DominanceTOE!FRecastTileGenerator::GatherNavigationDataGeometry()