|
2 | 2 | using System.Collections; |
3 | 3 | using System.Collections.Generic; |
4 | 4 | using System.Linq; |
| 5 | +using System.Text; |
5 | 6 | using NUnit.Framework; |
6 | 7 | using Unity.Netcode; |
7 | 8 | using Unity.Netcode.TestHelpers.Runtime; |
@@ -309,6 +310,8 @@ private bool DataPoolVerifySceneClient(int sceneIndex, string sceneName, LoadSce |
309 | 310 | return true; |
310 | 311 | } |
311 | 312 |
|
| 313 | + |
| 314 | + private StringBuilder m_ErrorMsg = new StringBuilder(); |
312 | 315 | /// <summary> |
313 | 316 | /// Small to heavy scene loading scenario to test the dynamically generated SceneEventData objects under a load. |
314 | 317 | /// Will load from 1 to 32 scenes in both single and additive ClientSynchronizationMode |
@@ -358,11 +361,30 @@ public IEnumerator SceneEventDataPoolSceneLoadingTest([Values(1, 2, 4, 6)] int n |
358 | 361 | } |
359 | 362 |
|
360 | 363 | yield return UnloadAllScenes(true); |
| 364 | + Assert.IsTrue(CheckNetworkObjectsToSynchronizeSceneChanges(m_ServerNetworkManager), $"{nameof(NetworkSpawnManager.NetworkObjectsToSynchronizeSceneChanges)} validation check failure!\n {m_ErrorMsg}"); |
| 365 | + m_ServerNetworkManager.SceneManager.OnSceneEvent -= ServerSceneManager_OnSceneEvent; |
| 366 | + // Validate that the NetworkObjectsToSynchronizeSceneChanges does not persist entries when scenes are unloaded. |
361 | 367 | foreach (var client in m_ClientNetworkManagers) |
362 | 368 | { |
| 369 | + Assert.IsTrue(CheckNetworkObjectsToSynchronizeSceneChanges(client), $"{nameof(NetworkSpawnManager.NetworkObjectsToSynchronizeSceneChanges)} validation check failure!\n {m_ErrorMsg}"); |
363 | 370 | client.SceneManager.OnUnloadComplete -= SceneManager_OnUnloadComplete; |
364 | 371 | } |
365 | | - m_ServerNetworkManager.SceneManager.OnSceneEvent -= ServerSceneManager_OnSceneEvent; |
| 372 | + } |
| 373 | + |
| 374 | + private bool CheckNetworkObjectsToSynchronizeSceneChanges(NetworkManager networkManager) |
| 375 | + { |
| 376 | + m_ErrorMsg.Clear(); |
| 377 | + if (networkManager.SpawnManager.NetworkObjectsToSynchronizeSceneChanges.Count > 0) |
| 378 | + { |
| 379 | + foreach (var entry in networkManager.SpawnManager.NetworkObjectsToSynchronizeSceneChanges) |
| 380 | + { |
| 381 | + if (entry.Value.IsSceneObject.HasValue && entry.Value.IsSceneObject.Value) |
| 382 | + { |
| 383 | + m_ErrorMsg.AppendLine($"{entry.Value.name} still exists within {nameof(NetworkSpawnManager.NetworkObjectsToSynchronizeSceneChanges)}!"); |
| 384 | + } |
| 385 | + } |
| 386 | + } |
| 387 | + return m_ErrorMsg.Length == 0; |
366 | 388 | } |
367 | 389 |
|
368 | 390 | private string m_SceneBeingUnloaded; |
|
0 commit comments