Hello everyone…
I want to ask whats the best way to spawn decals across a network?
I don’t think that there is any good way to replicate decals. The hit confirmation in my game is only by the server so I am using a unreliable netmulticast function that takes the hit location and normal and spawns the decals. Something like this.
void ABaseWeapon::SpawnImpactEffects_Implementation(const FHitResult& Impact)
{
if (ImpactTemplate && Impact.bBlockingHit)
{
FHitResult UseImpact = Impact;
// trace again to find component lost during replication
if (!Impact.Component.IsValid())
{
const FVector StartTrace = Impact.ImpactPoint + Impact.ImpactNormal * 10.0f;
const FVector EndTrace = Impact.ImpactPoint - Impact.ImpactNormal * 10.0f;
FHitResult Hit = WeaponTrace(StartTrace, EndTrace);
UseImpact = Hit;
}
AFireHitImpact* EffectActor = GetWorld()->SpawnActorDeferred<AFireHitImpact>(ImpactTemplate, Impact.ImpactPoint, Impact.ImpactNormal.Rotation());
if (EffectActor)
{
EffectActor->SurfaceHit = UseImpact;
UGameplayStatics::FinishSpawningActor(EffectActor, FTransform(Impact.ImpactNormal.Rotation(), Impact.ImpactPoint));
}
}
}
Something like this is also used in the shooter game. I am calling this function as an unreliable net multicast. I also used another uint8 for passing to the client when the shots happen, for weapon animation weapon fx and stuff. Should I merge these to functionalists into 1 function?