Skip to content

Commit c0d9087

Browse files
authored
fix: fixing an exception and error logging when two different objects are shown and hidden on the same frame [MTT-6303] (#2535)
* fix: fixing an exception and error logging when two different objects are shown and hidden on the same frame (#2524) * changelog entry
1 parent dfd08d8 commit c0d9087

File tree

3 files changed

+35
-1
lines changed

3 files changed

+35
-1
lines changed

com.unity.netcode.gameobjects/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ Additional documentation and release notes are available at [Multiplayer Documen
1717
- Fixed issue where a client could throw an exception if abruptly disconnected from a network session with one or more spawned `NetworkObject`(s). (#2510)
1818
- Fixed issue where invalid endpoint addresses were not being detected and returning false from NGO UnityTransport. (#2496)
1919
- Fixed some errors that could occur if a connection is lost and the loss is detected when attempting to write to the socket. (#2495)
20+
- Fixed an exception and error logging when two different objects are shown and hidden on the same frame (#2524)
2021

2122
## Changed
2223

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,10 @@ internal bool RemoveObjectFromShowingTo(NetworkObject networkObject, ulong clien
6767
ret = true;
6868
}
6969

70-
networkObject.Observers.Remove(clientId);
70+
if (ret)
71+
{
72+
networkObject.Observers.Remove(clientId);
73+
}
7174

7275
return ret;
7376
}

com.unity.netcode.gameobjects/Tests/Runtime/NetworkShowHideTests.cs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,36 @@ public IEnumerator NetworkShowHideTest()
286286
}
287287
}
288288

289+
[UnityTest]
290+
public IEnumerator ConcurrentShowAndHideOnDifferentObjects()
291+
{
292+
m_ClientId0 = m_ClientNetworkManagers[0].LocalClientId;
293+
ShowHideObject.ClientTargetedNetworkObjects.Clear();
294+
ShowHideObject.ClientIdToTarget = m_ClientId0;
295+
296+
297+
// create 3 objects
298+
var spawnedObject1 = SpawnObject(m_PrefabToSpawn, m_ServerNetworkManager);
299+
var spawnedObject2 = SpawnObject(m_PrefabToSpawn, m_ServerNetworkManager);
300+
var spawnedObject3 = SpawnObject(m_PrefabToSpawn, m_ServerNetworkManager);
301+
m_NetSpawnedObject1 = spawnedObject1.GetComponent<NetworkObject>();
302+
m_NetSpawnedObject2 = spawnedObject2.GetComponent<NetworkObject>();
303+
m_NetSpawnedObject3 = spawnedObject3.GetComponent<NetworkObject>();
304+
305+
// get the NetworkObject on a client instance
306+
yield return WaitForConditionOrTimeOut(RefreshNetworkObjects);
307+
AssertOnTimeout($"Could not refresh all NetworkObjects!");
308+
309+
m_NetSpawnedObject1.NetworkHide(m_ClientId0);
310+
311+
yield return WaitForTicks(m_ServerNetworkManager, 5);
312+
313+
m_NetSpawnedObject1.NetworkShow(m_ClientId0);
314+
m_NetSpawnedObject2.NetworkHide(m_ClientId0);
315+
316+
yield return WaitForTicks(m_ServerNetworkManager, 5);
317+
}
318+
289319
[UnityTest]
290320
public IEnumerator NetworkShowHideQuickTest()
291321
{

0 commit comments

Comments
 (0)