Skip to content

Commit bbdcf59

Browse files
update & fix
Fixing issue with null in-scene placed NetworkObject checking when session owner is assigned. Updating scene management (client side) to send the SynchronizeComplete message to all connected clients (so they will redistribute NetworkObjects evenly).
1 parent 81a88fc commit bbdcf59

2 files changed

Lines changed: 26 additions & 11 deletions

File tree

com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ internal void SetSessionOwner(ulong sessionOwner)
140140
foreach (var networkObjectEntry in SpawnManager.SpawnedObjects)
141141
{
142142
var networkObject = networkObjectEntry.Value;
143-
if (!networkObject.IsSceneObject.Value)
143+
if (networkObject.IsSceneObject == null || !networkObject.IsSceneObject.Value)
144144
{
145145
continue;
146146
}

com.unity.netcode.gameobjects/Runtime/SceneManagement/NetworkSceneManager.cs

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2336,15 +2336,22 @@ private void HandleClientSceneEvent(uint sceneEventId)
23362336
sceneEventData.SceneEventType = SceneEventType.SynchronizeComplete;
23372337
if (NetworkManager.DistributedAuthorityMode)
23382338
{
2339-
sceneEventData.TargetClientId = NetworkManager.CurrentSessionOwner;
2340-
sceneEventData.SenderClientId = NetworkManager.LocalClientId;
2341-
var message = new SceneEventMessage
2339+
foreach (var clientId in NetworkManager.ConnectedClientsIds)
23422340
{
2343-
EventData = sceneEventData,
2344-
};
2345-
var target = NetworkManager.DAHost ? NetworkManager.CurrentSessionOwner : NetworkManager.ServerClientId;
2346-
var size = NetworkManager.ConnectionManager.SendMessage(ref message, k_DeliveryType, target);
2347-
NetworkManager.NetworkMetrics.TrackSceneEventSent(target, (uint)sceneEventData.SceneEventType, SceneNameFromHash(sceneEventData.SceneHash), size);
2341+
if (clientId == NetworkManager.LocalClientId)
2342+
{
2343+
continue;
2344+
}
2345+
sceneEventData.TargetClientId = clientId;
2346+
sceneEventData.SenderClientId = NetworkManager.LocalClientId;
2347+
var message = new SceneEventMessage
2348+
{
2349+
EventData = sceneEventData,
2350+
};
2351+
var target = NetworkManager.DAHost ? NetworkManager.CurrentSessionOwner : NetworkManager.ServerClientId;
2352+
var size = NetworkManager.ConnectionManager.SendMessage(ref message, k_DeliveryType, target);
2353+
NetworkManager.NetworkMetrics.TrackSceneEventSent(target, (uint)sceneEventData.SceneEventType, SceneNameFromHash(sceneEventData.SceneHash), size);
2354+
}
23482355
}
23492356
else
23502357
{
@@ -2493,13 +2500,17 @@ private void HandleSessionOwnerEvent(uint sceneEventId, ulong clientId)
24932500
}
24942501
case SceneEventType.SynchronizeComplete:
24952502
{
2496-
2497-
24982503
// At this point the client is considered fully "connected"
24992504
if ((NetworkManager.DistributedAuthorityMode && NetworkManager.LocalClient.IsSessionOwner) || !NetworkManager.DistributedAuthorityMode)
25002505
{
25012506
if (NetworkManager.DistributedAuthorityMode && !NetworkManager.DAHost)
25022507
{
2508+
// DANGO-EXP TODO: Remove this once service is sending the synchronization message to all clients
2509+
if (NetworkManager.ConnectedClients.ContainsKey(clientId) && NetworkManager.ConnectionManager.ConnectedClientIds.Contains(clientId) && NetworkManager.ConnectedClientsList.Contains(NetworkManager.ConnectedClients[clientId]))
2510+
{
2511+
EndSceneEvent(sceneEventId);
2512+
return;
2513+
}
25032514
NetworkManager.ConnectionManager.AddClient(clientId);
25042515
}
25052516

@@ -2517,6 +2528,10 @@ private void HandleSessionOwnerEvent(uint sceneEventId, ulong clientId)
25172528
}
25182529
else
25192530
{
2531+
// DANGO-EXP TODO: Remove this once service distributes objects
2532+
// Non-session owners receive this notification from newly connected clients and upon receiving
2533+
// the event they will redistribute their NetworkObjects
2534+
NetworkManager.SpawnManager.DistributeNetworkObjects(clientId);
25202535
EndSceneEvent(sceneEventId);
25212536
return;
25222537
}

0 commit comments

Comments
 (0)