From 1b8b5853671e14a386c9930bada2a3a9082b4b20 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Sun, 21 May 2023 22:38:48 +0200 Subject: [PATCH] Optimize network replication when no client can receive object --- Source/Engine/Networking/NetworkReplicator.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/Source/Engine/Networking/NetworkReplicator.cpp b/Source/Engine/Networking/NetworkReplicator.cpp index be7571b80..8ef668fdb 100644 --- a/Source/Engine/Networking/NetworkReplicator.cpp +++ b/Source/Engine/Networking/NetworkReplicator.cpp @@ -1347,6 +1347,15 @@ void NetworkInternal::NetworkReplicatorUpdate() if (item.Role != NetworkObjectRole::OwnedAuthoritative && (!isClient && item.OwnerClientId != NetworkManager::LocalClientId)) continue; // Send replication messages of only owned objects or from other client objects + // Skip serialization of objects that none will receive + if (!isClient) + { + // TODO: per-object relevancy for connected clients (eg. skip replicating actor to far players) + BuildCachedTargets(item); + if (CachedTargets.Count() == 0) + continue; + } + if (item.AsNetworkObject) item.AsNetworkObject->OnNetworkSerialize(); @@ -1400,8 +1409,6 @@ void NetworkInternal::NetworkReplicatorUpdate() peer->EndSendMessage(NetworkChannelType::Unreliable, msg); else { - // TODO: per-object relevancy for connected clients (eg. skip replicating actor to far players) - BuildCachedTargets(item); peer->EndSendMessage(NetworkChannelType::Unreliable, msg, CachedTargets); }