Skip to content

Commit c287327

Browse files
committed
Ensure we don't send CreateObject messages to the cmb service when there are no valid receivers
1 parent e5d4627 commit c287327

File tree

1 file changed

+24
-5
lines changed

1 file changed

+24
-5
lines changed

com.unity.netcode.gameobjects/Runtime/Spawning/NetworkSpawnManager.cs

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System.Diagnostics.CodeAnalysis;
44
using System.Linq;
55
using System.Text;
6+
using Unity.Collections;
67
using UnityEngine;
78

89
namespace Unity.Netcode
@@ -577,12 +578,30 @@ internal void ChangeOwnership(NetworkObject networkObject, ulong clientId, bool
577578
// If we are connected to the CMB service or not the DAHost (i.e. pure DA-Clients only)
578579
if (NetworkManager.CMBServiceConnection || !NetworkManager.DAHost)
579580
{
580-
// Populate valid target client identifiers that should receive this change in ownership message.
581-
message.ClientIds = NetworkManager.ConnectedClientsIds.Where((c) => !IsObjectVisibilityPending(c, ref networkObject) && networkObject.IsNetworkVisibleTo(c)).ToArray();
582-
message.ClientIdCount = message.ClientIds.Length;
581+
// Calculate valid target client identifiers that should receive this change in ownership message.
582+
var clientIds = new List<ulong>(NetworkManager.ConnectedClientsIds.Count);
583+
foreach (var id in NetworkManager.ConnectedClientsIds)
584+
{
585+
if (id == NetworkManager.LocalClientId)
586+
{
587+
continue;
588+
}
583589

584-
size = NetworkManager.ConnectionManager.SendMessage(ref message, NetworkDelivery.ReliableSequenced, NetworkManager.ServerClientId);
585-
NetworkManager.NetworkMetrics.TrackOwnershipChangeSent(NetworkManager.LocalClientId, networkObject, size);
590+
if (networkObject.IsNetworkVisibleTo(id) && !IsObjectVisibilityPending(id, ref networkObject))
591+
{
592+
clientIds.Add(id);
593+
}
594+
}
595+
596+
// Don't send the message if there are no valid receivers
597+
if (clientIds.Count > 0)
598+
{
599+
message.ClientIds = clientIds.ToArray();
600+
message.ClientIdCount = clientIds.Count;
601+
602+
size = NetworkManager.ConnectionManager.SendMessage(ref message, NetworkDelivery.ReliableSequenced, NetworkManager.ServerClientId);
603+
NetworkManager.NetworkMetrics.TrackOwnershipChangeSent(NetworkManager.LocalClientId, networkObject, size);
604+
}
586605
}
587606
else // We are the DAHost so broadcast the ownership change
588607
{

0 commit comments

Comments
 (0)