|
8 | 8 | using UnityEngine.TestTools;
|
9 | 9 | using Unity.Netcode.RuntimeTests;
|
10 | 10 | using Unity.Netcode;
|
| 11 | +using Object = UnityEngine.Object; |
11 | 12 |
|
12 | 13 | namespace TestProject.RuntimeTests
|
13 | 14 | {
|
@@ -935,7 +936,129 @@ public IEnumerator FastReaderAllocationTest()
|
935 | 936 | nativeArray.Dispose();
|
936 | 937 | fastBufferWriter.Dispose();
|
937 | 938 | networkManager.Shutdown();
|
938 |
| - UnityEngine.Object.Destroy(networkManagerGameObject); |
| 939 | + Object.Destroy(networkManagerGameObject); |
939 | 940 | }
|
940 | 941 | }
|
| 942 | + |
| 943 | + public class NetworkSceneManagerDDOLTests |
| 944 | + { |
| 945 | + private NetworkManager m_ServerNetworkManager; |
| 946 | + private GameObject m_NetworkManagerGameObject; |
| 947 | + private GameObject m_DDOL_ObjectToSpawn; |
| 948 | + |
| 949 | + protected float m_ConditionMetFrequency = 0.1f; |
| 950 | + |
| 951 | + [UnitySetUp] |
| 952 | + protected IEnumerator SetUp() |
| 953 | + { |
| 954 | + m_NetworkManagerGameObject = new GameObject("NetworkManager - Host"); |
| 955 | + m_ServerNetworkManager = m_NetworkManagerGameObject.AddComponent<NetworkManager>(); |
| 956 | + |
| 957 | + m_DDOL_ObjectToSpawn = new GameObject(); |
| 958 | + m_DDOL_ObjectToSpawn.AddComponent<NetworkObject>(); |
| 959 | + m_DDOL_ObjectToSpawn.AddComponent<DDOLBehaviour>(); |
| 960 | + |
| 961 | + m_ServerNetworkManager.NetworkConfig = new NetworkConfig() |
| 962 | + { |
| 963 | + ConnectionApproval = false, |
| 964 | + NetworkPrefabs = new List<NetworkPrefab>(), |
| 965 | + NetworkTransport = m_NetworkManagerGameObject.AddComponent<SIPTransport>(), |
| 966 | + }; |
| 967 | + m_ServerNetworkManager.StartHost(); |
| 968 | + yield break; |
| 969 | + } |
| 970 | + |
| 971 | + [UnityTearDown] |
| 972 | + protected IEnumerator TearDown() |
| 973 | + { |
| 974 | + m_ServerNetworkManager.Shutdown(); |
| 975 | + |
| 976 | + Object.Destroy(m_NetworkManagerGameObject); |
| 977 | + Object.Destroy(m_DDOL_ObjectToSpawn); |
| 978 | + |
| 979 | + yield break; |
| 980 | + } |
| 981 | + |
| 982 | + public enum DefaultState |
| 983 | + { |
| 984 | + IsEnabled, |
| 985 | + IsDisabled |
| 986 | + } |
| 987 | + |
| 988 | + public enum MovedIntoDDOLBy |
| 989 | + { |
| 990 | + User, |
| 991 | + NetworkSceneManager |
| 992 | + } |
| 993 | + |
| 994 | + public enum NetworkObjectType |
| 995 | + { |
| 996 | + InScenePlaced, |
| 997 | + DynamicallySpawned |
| 998 | + } |
| 999 | + |
| 1000 | + /// <summary> |
| 1001 | + /// Tests to make sure NetworkObjects moved into the DDOL will |
| 1002 | + /// restore back to their currently active state when a full |
| 1003 | + /// scene transition is complete. |
| 1004 | + /// This tests both in-scene placed and dynamically spawned NetworkObjects |
| 1005 | + [UnityTest] |
| 1006 | + public IEnumerator InSceneNetworkObjectState([Values(DefaultState.IsEnabled, DefaultState.IsDisabled)] DefaultState activeState, |
| 1007 | + [Values(MovedIntoDDOLBy.User, MovedIntoDDOLBy.NetworkSceneManager)] MovedIntoDDOLBy movedIntoDDOLBy, |
| 1008 | + [Values(NetworkObjectType.InScenePlaced, NetworkObjectType.DynamicallySpawned)] NetworkObjectType networkObjectType) |
| 1009 | + { |
| 1010 | + var isActive = activeState == DefaultState.IsEnabled ? true : false; |
| 1011 | + var isInScene = networkObjectType == NetworkObjectType.InScenePlaced ? true : false; |
| 1012 | + var networkObject = m_DDOL_ObjectToSpawn.GetComponent<NetworkObject>(); |
| 1013 | + var ddolBehaviour = m_DDOL_ObjectToSpawn.GetComponent<DDOLBehaviour>(); |
| 1014 | + |
| 1015 | + // All tests require this to be false |
| 1016 | + networkObject.DestroyWithScene = false; |
| 1017 | + |
| 1018 | + if (movedIntoDDOLBy == MovedIntoDDOLBy.User) |
| 1019 | + { |
| 1020 | + ddolBehaviour.MoveToDDOL(); |
| 1021 | + } |
| 1022 | + |
| 1023 | + // Sets whether we are in-scene or dynamically spawned NetworkObject |
| 1024 | + ddolBehaviour.SetInScene(isInScene); |
| 1025 | + |
| 1026 | + Assert.That(networkObject.IsSpawned); |
| 1027 | + |
| 1028 | + m_DDOL_ObjectToSpawn.SetActive(isActive); |
| 1029 | + |
| 1030 | + m_ServerNetworkManager.SceneManager.MoveObjectsToDontDestroyOnLoad(); |
| 1031 | + |
| 1032 | + yield return new WaitForSeconds(0.03f); |
| 1033 | + |
| 1034 | + // It should be isActive when MoveObjectsToDontDestroyOnLoad is called. |
| 1035 | + Assert.That(networkObject.isActiveAndEnabled == isActive); |
| 1036 | + |
| 1037 | + m_ServerNetworkManager.SceneManager.MoveObjectsFromDontDestroyOnLoadToScene(SceneManager.GetActiveScene()); |
| 1038 | + |
| 1039 | + yield return new WaitForSeconds(0.03f); |
| 1040 | + |
| 1041 | + // It should be isActive when MoveObjectsFromDontDestroyOnLoadToScene is called. |
| 1042 | + Assert.That(networkObject.isActiveAndEnabled == isActive); |
| 1043 | + |
| 1044 | + //Done |
| 1045 | + networkObject.Despawn(false); |
| 1046 | + } |
| 1047 | + |
| 1048 | + public class DDOLBehaviour : NetworkBehaviour |
| 1049 | + { |
| 1050 | + public void MoveToDDOL() |
| 1051 | + { |
| 1052 | + DontDestroyOnLoad(gameObject); |
| 1053 | + } |
| 1054 | + |
| 1055 | + public void SetInScene(bool isInScene) |
| 1056 | + { |
| 1057 | + var networkObject = GetComponent<NetworkObject>(); |
| 1058 | + networkObject.IsSceneObject = isInScene; |
| 1059 | + } |
| 1060 | + } |
| 1061 | + |
| 1062 | + } |
| 1063 | + |
941 | 1064 | }
|
0 commit comments