diff --git a/Source/Engine/Networking/NetworkReplicator.cpp b/Source/Engine/Networking/NetworkReplicator.cpp index c2f50ee6a..cef1e8408 100644 --- a/Source/Engine/Networking/NetworkReplicator.cpp +++ b/Source/Engine/Networking/NetworkReplicator.cpp @@ -301,6 +301,9 @@ void NetworkReplicator::SpawnObject(ScriptingObject* obj) if (!obj || NetworkManager::State == NetworkConnectionState::Offline) return; ScopeLock lock(ObjectsLock); + const auto it = Objects.Find(obj->GetID()); + if (it != Objects.End() && it->Item.Spawned) + return; // Skip if object was already spawned // Register for spawning (batched during update) SpawnQueue.AddUnique(obj); @@ -441,7 +444,7 @@ void NetworkInternal::NetworkReplicatorUpdate() NetworkPeer* peer = NetworkManager::Peer; // TODO: introduce NetworkReplicationHierarchy to optimize objects replication in large worlds (eg. batched culling networked scene objects that are too far from certain client to be relevant) // TODO: per-object sync interval (in frames) - could be scaled by hierarchy (eg. game could slow down sync rate for objects far from player) - + if (!isClient && NewClients.Count() != 0) { // Sync any previously spawned objects with late-joining clients