FGlobalComponentReregisterContext::FGlobalComponentReregisterContext(const TArray<AActor*>& InParentActors) { ActiveGlobalReregisterContextCount++; // wait until resources are released FlushRenderingCommands(); // Detach only actor components that are children of the actors list provided for(TObjectIterator<UActorComponent> ComponentIt;ComponentIt;++ComponentIt) { bool bShouldReregister=false; UPrimitiveComponent* PrimitiveComponent = Cast<UPrimitiveComponent>(*ComponentIt); if (PrimitiveComponent && PrimitiveComponent->ReplacementPrimitive.Get()) { UPrimitiveComponent* ReplacementPrimitive = PrimitiveComponent->ReplacementPrimitive.Get(); AActor* ParentActor = Cast<AActor>(ReplacementPrimitive->GetOuter()); if (ParentActor && InParentActors.Contains(ParentActor)) { bShouldReregister = true; } } if( bShouldReregister ) { new(ComponentContexts) FComponentReregisterContext(*ComponentIt); } } }