Skip to content

Commit 7389f8b

Browse files
fix: networkshow client connected scenemanagement disabled (#3056)
* fix Fixing issue where NetworkSpawnManager.ShowHiddenObjectsToNewlyJoinedClient was being invoked on the session owner when scene management is disabled. * test Adding an additional test for NetworkSpawnManager.ShowHiddenObjectsToNewlyJoinedClient validation test that runs with scene management disabled. Adding some additional checks within NetcodeIntegrationTestHelpers to skip any NetworkManagers that were destroyed prior to the final shutdown sequence.
1 parent 26c01ec commit 7389f8b

File tree

3 files changed

+43
-15
lines changed

3 files changed

+43
-15
lines changed

com.unity.netcode.gameobjects/Runtime/Messaging/Messages/ClientConnectedMessage.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,10 @@ public void Handle(ref NetworkContext context)
5959
// - Hidden from the session owner
6060
// - Owned by this client
6161
// - Has NetworkObject.SpawnWithObservers set to true (the default)
62-
networkManager.SpawnManager.ShowHiddenObjectsToNewlyJoinedClient(ClientId);
62+
if (!networkManager.LocalClient.IsSessionOwner)
63+
{
64+
networkManager.SpawnManager.ShowHiddenObjectsToNewlyJoinedClient(ClientId);
65+
}
6366

6467
// We defer redistribution to the end of the NetworkUpdateStage.PostLateUpdate
6568
networkManager.RedistributeToClient = true;

com.unity.netcode.gameobjects/TestHelpers/Runtime/NetcodeIntegrationTestHelpers.cs

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -326,21 +326,31 @@ public static void Destroy()
326326

327327
s_IsStarted = false;
328328

329-
// Shutdown the server which forces clients to disconnect
330-
foreach (var networkManager in NetworkManagerInstances)
329+
try
331330
{
332-
networkManager.Shutdown();
333-
s_Hooks.Remove(networkManager);
334-
}
331+
// Shutdown the server which forces clients to disconnect
332+
foreach (var networkManager in NetworkManagerInstances)
333+
{
334+
if (networkManager != null && networkManager.IsListening)
335+
{
336+
networkManager?.Shutdown();
337+
s_Hooks.Remove(networkManager);
338+
}
339+
}
335340

336-
// Destroy the network manager instances
337-
foreach (var networkManager in NetworkManagerInstances)
338-
{
339-
if (networkManager.gameObject != null)
341+
// Destroy the network manager instances
342+
foreach (var networkManager in NetworkManagerInstances)
340343
{
341-
Object.DestroyImmediate(networkManager.gameObject);
344+
if (networkManager != null && networkManager.gameObject)
345+
{
346+
Object.DestroyImmediate(networkManager.gameObject);
347+
}
342348
}
343349
}
350+
catch (Exception ex)
351+
{
352+
Debug.LogException(ex);
353+
}
344354

345355
NetworkManagerInstances.Clear();
346356

com.unity.netcode.gameobjects/Tests/Runtime/DistributedAuthority/ExtendedNetworkShowAndHideTests.cs

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,38 @@
66

77
namespace Unity.Netcode.RuntimeTests
88
{
9-
[TestFixture(HostOrServer.DAHost)]
9+
[TestFixture(HostOrServer.DAHost, true)]
10+
[TestFixture(HostOrServer.DAHost, false)]
1011
public class ExtendedNetworkShowAndHideTests : NetcodeIntegrationTest
1112
{
1213
protected override int NumberOfClients => 3;
13-
14+
private bool m_EnableSceneManagement;
1415
private GameObject m_ObjectToSpawn;
1516
private NetworkObject m_SpawnedObject;
1617
private NetworkManager m_ClientToHideFrom;
1718
private NetworkManager m_LateJoinClient;
1819
private NetworkManager m_SpawnOwner;
1920

20-
public ExtendedNetworkShowAndHideTests(HostOrServer hostOrServer) : base(hostOrServer) { }
21+
public ExtendedNetworkShowAndHideTests(HostOrServer hostOrServer, bool enableSceneManagement) : base(hostOrServer)
22+
{
23+
m_EnableSceneManagement = enableSceneManagement;
24+
}
2125

2226
protected override void OnServerAndClientsCreated()
2327
{
28+
if (!UseCMBService())
29+
{
30+
m_ServerNetworkManager.NetworkConfig.EnableSceneManagement = m_EnableSceneManagement;
31+
}
32+
33+
foreach (var client in m_ClientNetworkManagers)
34+
{
35+
client.NetworkConfig.EnableSceneManagement = m_EnableSceneManagement;
36+
}
37+
2438
m_ObjectToSpawn = CreateNetworkObjectPrefab("TestObject");
2539
m_ObjectToSpawn.SetActive(false);
40+
2641
base.OnServerAndClientsCreated();
2742
}
2843

@@ -81,7 +96,7 @@ private bool IsClientPromotedToSessionOwner()
8196
protected override void OnNewClientCreated(NetworkManager networkManager)
8297
{
8398
m_LateJoinClient = networkManager;
84-
99+
networkManager.NetworkConfig.EnableSceneManagement = m_EnableSceneManagement;
85100
networkManager.NetworkConfig.Prefabs = m_SpawnOwner.NetworkConfig.Prefabs;
86101
base.OnNewClientCreated(networkManager);
87102
}

0 commit comments

Comments
 (0)