Breakable Actor only has GeometryCollection Component.
When Character is attacking, Character’s Field System is activated and Breakable Actor is broken.
OnBreakEvent → SetCollisionResponse and Respawn using lambda function.
When Breakable actor is respanwed, frame drop occurs.
I think, this Breakable actor has a lot of fragments(51 fragments currently) ![]()
so when this actor destroyed and respawn, it seems to affect the frame.
but I want to put a lot of these actors.
So I want to know how to efficiently respawn breakable actor.
void ABreakableItem::OnBreakEvent(const FChaosBreakEvent& BreakEvent)
{
if (bIsDestructed)
{
return;
}
GeometryCollection->EnableClustering = false;
GeometryCollection->SetCollisionResponseToChannel(ECollisionChannel::ECC_Pawn, ECollisionResponse::ECR_Ignore);
GeometryCollection->OnActorEnableCollisionChanged();
const float respawnTime = RespawnTime.X * 60 + RespawnTime.Y + DestroyDelayTime;
Respawn(respawnTime);
bIsDestructed = true;
}
void ABreakableItem::Respawn(float DelayTime)
{
FTimerHandle DelayTimerHandle;
GetWorld()->GetTimerManager().SetTimer(DelayTimerHandle, FTimerDelegate::CreateLambda([&]()
{
if (bCanRespawn)
{
FActorSpawnParameters spawnParams;
spawnParams.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
FTransform transform = GetActorTransform();
transform.SetLocation(SpawnLocation);
GetWorld()->SpawnActor<ABreakableItem>(GetClass(), transform, spawnParams);
}
Destroy();
}), DelayTime, false);
}