From 13324252ab2281b9c34849ad8434841062c0f54f Mon Sep 17 00:00:00 2001 From: "M. Fatih MAR" Date: Wed, 25 Aug 2021 23:44:12 +0100 Subject: [PATCH 1/6] refactor: assign auto-incremented GlobalObjectIdHash as a fallback in MultiInstanceHelpers.MakeNetworkObjectTestPrefab() --- .../Tests/Runtime/BaseMultiInstanceTest.cs | 2 +- .../Tests/Runtime/Metrics/NetworkObjectMetricsTests.cs | 2 +- .../Tests/Runtime/Metrics/OwnershipChangeMetricsTests.cs | 4 ++-- .../Tests/Runtime/MultiInstanceHelpers.cs | 9 ++++++++- .../Tests/Runtime/NetworkBehaviourUpdaterTests.cs | 2 +- .../Runtime/NetworkObject/NetworkObjectOwnershipTests.cs | 2 +- .../Tests/Runtime/NetworkPrefabHandlerTests.cs | 2 +- .../Tests/Runtime/NetworkShowHideTests.cs | 2 +- .../Tests/Runtime/Timing/TimeMultiInstanceTest.cs | 2 +- .../Assets/Tests/Manual/Scripts/PlayerMovementManager.cs | 9 ++++----- .../FixedUpdateMessagesAreOnlyProcessedOnceTest.cs | 2 +- testproject/Assets/Tests/Runtime/MessageOrdering.cs | 4 ++-- .../Tests/Runtime/MultiClientConnectionApproval.cs | 4 ++-- 13 files changed, 26 insertions(+), 20 deletions(-) diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/BaseMultiInstanceTest.cs b/com.unity.netcode.gameobjects/Tests/Runtime/BaseMultiInstanceTest.cs index df3d8d30ee..4af391cada 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/BaseMultiInstanceTest.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/BaseMultiInstanceTest.cs @@ -96,7 +96,7 @@ public IEnumerator StartSomeClientsAndServerWithPlayers(bool useHost, int nbClie * at runtime without it being treated as a SceneObject or causing other conflicts with the Netcode. */ // Make it a prefab - MultiInstanceHelpers.MakeNetworkedObjectTestPrefab(networkObject, DefaultPayerGlobalObjectIdHashValue); + MultiInstanceHelpers.MakeNetworkObjectTestPrefab(networkObject, DefaultPayerGlobalObjectIdHashValue); updatePlayerPrefab(m_PlayerPrefab); // update player prefab with whatever is needed before players are spawned diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Metrics/NetworkObjectMetricsTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/Metrics/NetworkObjectMetricsTests.cs index 06c072d7ac..b3d0f976c9 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/Metrics/NetworkObjectMetricsTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/Metrics/NetworkObjectMetricsTests.cs @@ -22,7 +22,7 @@ public class NetworkObjectMetricsTests : SingleClientMetricTestBase var gameObject = new GameObject(NewNetworkObjectName); m_NewNetworkObject = gameObject.AddComponent(); m_NewNetworkObject.NetworkManagerOwner = m_ServerNetworkManager; - MultiInstanceHelpers.MakeNetworkedObjectTestPrefab(m_NewNetworkObject); + MultiInstanceHelpers.MakeNetworkObjectTestPrefab(m_NewNetworkObject); var networkPrefab = new NetworkPrefab { Prefab = gameObject }; m_ServerNetworkManager.NetworkConfig.NetworkPrefabs.Add(networkPrefab); diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Metrics/OwnershipChangeMetricsTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/Metrics/OwnershipChangeMetricsTests.cs index 87c781e189..81fba71b58 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/Metrics/OwnershipChangeMetricsTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/Metrics/OwnershipChangeMetricsTests.cs @@ -17,7 +17,7 @@ public IEnumerator TrackOwnershipChangeSentMetric() { var gameObject = new GameObject(Guid.NewGuid().ToString()); var networkObject = gameObject.AddComponent(); - MultiInstanceHelpers.MakeNetworkedObjectTestPrefab(networkObject, DefaultPayerGlobalObjectIdHashValue); + MultiInstanceHelpers.MakeNetworkObjectTestPrefab(networkObject, DefaultPayerGlobalObjectIdHashValue); networkObject.NetworkManagerOwner = Server; networkObject.Spawn(); @@ -42,7 +42,7 @@ public IEnumerator TrackOwnershipChangeReceivedMetric() { var gameObject = new GameObject(Guid.NewGuid().ToString()); var networkObject = gameObject.AddComponent(); - MultiInstanceHelpers.MakeNetworkedObjectTestPrefab(networkObject, DefaultPayerGlobalObjectIdHashValue); + MultiInstanceHelpers.MakeNetworkObjectTestPrefab(networkObject, DefaultPayerGlobalObjectIdHashValue); networkObject.NetworkManagerOwner = Server; networkObject.Spawn(); diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/MultiInstanceHelpers.cs b/com.unity.netcode.gameobjects/Tests/Runtime/MultiInstanceHelpers.cs index e765a184ff..6d8b796055 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/MultiInstanceHelpers.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/MultiInstanceHelpers.cs @@ -204,6 +204,7 @@ public class CoroutineResultWrapper public T Result; } + private static uint s_AutoIncrementGlobalObjectIdHashCounter = 111111; /// /// Normally we would only allow player prefabs to be set to a prefab. Not runtime created objects. @@ -214,7 +215,7 @@ public class CoroutineResultWrapper /// /// The networkObject to be treated as Prefab /// The GlobalObjectId to force - public static void MakeNetworkedObjectTestPrefab(NetworkObject networkObject, uint globalObjectIdHash = default) + public static void MakeNetworkObjectTestPrefab(NetworkObject networkObject, uint globalObjectIdHash = default) { // Set a globalObjectId for prefab if (globalObjectIdHash != default) @@ -225,6 +226,12 @@ public static void MakeNetworkedObjectTestPrefab(NetworkObject networkObject, ui // Force generation networkObject.GenerateGlobalObjectIdHash(); + // Fallback to auto-increment if generation fails + if (networkObject.GlobalObjectIdHash == default) + { + networkObject.GlobalObjectIdHash = ++s_AutoIncrementGlobalObjectIdHashCounter; + } + // Prevent object from being snapped up as a scene object networkObject.IsSceneObject = false; } diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkBehaviourUpdaterTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkBehaviourUpdaterTests.cs index 6efcf68ed3..570a1a46a7 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkBehaviourUpdaterTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkBehaviourUpdaterTests.cs @@ -65,7 +65,7 @@ void AddNetworkBehaviour(Type type, GameObject prefab) var networkObjectPrefab = prefabToSpawn.AddComponent(); AddNetworkBehaviour(firstNetworkBehaviour, prefabToSpawn); AddNetworkBehaviour(secondNetworkBehaviour, prefabToSpawn); - MultiInstanceHelpers.MakeNetworkedObjectTestPrefab(networkObjectPrefab); + MultiInstanceHelpers.MakeNetworkObjectTestPrefab(networkObjectPrefab); m_ServerNetworkManager.NetworkConfig.NetworkPrefabs.Add(new NetworkPrefab() { Prefab = prefabToSpawn }); foreach (var clientNetworkManager in m_ClientNetworkManagers) { diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkObject/NetworkObjectOwnershipTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkObject/NetworkObjectOwnershipTests.cs index 2f5015aff5..26e248618a 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkObject/NetworkObjectOwnershipTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkObject/NetworkObjectOwnershipTests.cs @@ -61,7 +61,7 @@ public IEnumerator Setup() m_DummyPrefab = new GameObject("DummyPrefabPrototype"); m_DummyPrefab.AddComponent(); m_DummyPrefab.AddComponent(); - MultiInstanceHelpers.MakeNetworkedObjectTestPrefab(m_DummyPrefab.GetComponent()); + MultiInstanceHelpers.MakeNetworkObjectTestPrefab(m_DummyPrefab.GetComponent()); m_ServerNetworkManager.NetworkConfig.NetworkPrefabs.Add(new NetworkPrefab { Prefab = m_DummyPrefab }); foreach (var clientNetworkManager in m_ClientNetworkManagers) { diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkPrefabHandlerTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkPrefabHandlerTests.cs index f110c83abc..c4fdcac29f 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkPrefabHandlerTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkPrefabHandlerTests.cs @@ -22,7 +22,7 @@ private GameObject MakeValidNetworkPrefab() { Guid baseObjectID = NetworkManagerHelper.AddGameNetworkObject(k_TestPrefabObjectName + m_GlobalObjectIdHashBase.ToString()); NetworkObject validPrefab = NetworkManagerHelper.InstantiatedNetworkObjects[baseObjectID]; - MultiInstanceHelpers.MakeNetworkedObjectTestPrefab(validPrefab, m_GlobalObjectIdHashBase); + MultiInstanceHelpers.MakeNetworkObjectTestPrefab(validPrefab, m_GlobalObjectIdHashBase); m_GlobalObjectIdHashBase++; return validPrefab.gameObject; } diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkShowHideTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkShowHideTests.cs index be0b14f370..62f7461c6d 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkShowHideTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkShowHideTests.cs @@ -45,7 +45,7 @@ public GameObject PreparePrefab(Type type) var prefabToSpawn = new GameObject(); prefabToSpawn.AddComponent(type); var networkObjectPrefab = prefabToSpawn.AddComponent(); - MultiInstanceHelpers.MakeNetworkedObjectTestPrefab(networkObjectPrefab, DefaultPayerGlobalObjectIdHashValue); + MultiInstanceHelpers.MakeNetworkObjectTestPrefab(networkObjectPrefab, DefaultPayerGlobalObjectIdHashValue); m_ServerNetworkManager.NetworkConfig.NetworkPrefabs.Add(new NetworkPrefab() { Prefab = prefabToSpawn }); foreach (var clientNetworkManager in m_ClientNetworkManagers) { diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Timing/TimeMultiInstanceTest.cs b/com.unity.netcode.gameobjects/Tests/Runtime/Timing/TimeMultiInstanceTest.cs index 98330b286d..74b1bcb8bd 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/Timing/TimeMultiInstanceTest.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/Timing/TimeMultiInstanceTest.cs @@ -116,7 +116,7 @@ private IEnumerator StartSomeClientsAndServerWithPlayersCustom(bool useHost, int * at runtime without it being treated as a SceneObject or causing other conflicts with the Netcode. */ // Make it a prefab - MultiInstanceHelpers.MakeNetworkedObjectTestPrefab(networkObject); + MultiInstanceHelpers.MakeNetworkObjectTestPrefab(networkObject); // Set the player prefab server.NetworkConfig.PlayerPrefab = m_PlayerPrefab; diff --git a/testproject/Assets/Tests/Manual/Scripts/PlayerMovementManager.cs b/testproject/Assets/Tests/Manual/Scripts/PlayerMovementManager.cs index d03cc624eb..e90c7a61a7 100644 --- a/testproject/Assets/Tests/Manual/Scripts/PlayerMovementManager.cs +++ b/testproject/Assets/Tests/Manual/Scripts/PlayerMovementManager.cs @@ -1,7 +1,6 @@ using UnityEngine; using Unity.Netcode; - namespace TestProject.ManualTests { /// @@ -11,7 +10,7 @@ public class PlayerMovementManager : NetworkBehaviour { public int MoveSpeed = 10; - private NetworkObject m_NetworkedObject; + private NetworkObject m_NetworkObject; private RandomMovement m_RandomMovement; @@ -21,7 +20,7 @@ public class PlayerMovementManager : NetworkBehaviour // Start is called before the first frame update private void Start() { - m_NetworkedObject = GetComponent(); + m_NetworkObject = GetComponent(); m_RandomMovement = GetComponent(); } @@ -37,7 +36,7 @@ public override void OnNetworkSpawn() private void Update() { - if (m_NetworkedObject.IsOwner && Input.GetKeyDown(KeyCode.Space)) + if (m_NetworkObject.IsOwner && Input.GetKeyDown(KeyCode.Space)) { if (m_RandomMovement) { @@ -45,7 +44,7 @@ private void Update() } } - if (m_NetworkedObject && m_NetworkedObject.NetworkManager && m_NetworkedObject.NetworkManager.IsListening) + if (m_NetworkObject && m_NetworkObject.NetworkManager && m_NetworkObject.NetworkManager.IsListening) { if (m_RandomMovement.enabled) { diff --git a/testproject/Assets/Tests/Runtime/FixedUpdateMessagesAreOnlyProcessedOnceTest.cs b/testproject/Assets/Tests/Runtime/FixedUpdateMessagesAreOnlyProcessedOnceTest.cs index c79a0f7979..a543cfb3c0 100644 --- a/testproject/Assets/Tests/Runtime/FixedUpdateMessagesAreOnlyProcessedOnceTest.cs +++ b/testproject/Assets/Tests/Runtime/FixedUpdateMessagesAreOnlyProcessedOnceTest.cs @@ -51,7 +51,7 @@ public IEnumerator TestFixedUpdateMessagesAreOnlyProcessedOnce() var networkObject = m_Prefab.AddComponent(); // Make it a prefab - MultiInstanceHelpers.MakeNetworkedObjectTestPrefab(networkObject, 1); + MultiInstanceHelpers.MakeNetworkObjectTestPrefab(networkObject, 1); var handler = new SpawnRpcDespawnInstanceHandler(1); foreach (var client in clients) { diff --git a/testproject/Assets/Tests/Runtime/MessageOrdering.cs b/testproject/Assets/Tests/Runtime/MessageOrdering.cs index 70506cdd08..aa7ffb593a 100644 --- a/testproject/Assets/Tests/Runtime/MessageOrdering.cs +++ b/testproject/Assets/Tests/Runtime/MessageOrdering.cs @@ -45,7 +45,7 @@ public IEnumerator SpawnChangeOwnership() var networkObject = m_Prefab.AddComponent(); // Make it a prefab - MultiInstanceHelpers.MakeNetworkedObjectTestPrefab(networkObject); + MultiInstanceHelpers.MakeNetworkObjectTestPrefab(networkObject); var validNetworkPrefab = new NetworkPrefab(); validNetworkPrefab.Prefab = m_Prefab; @@ -113,7 +113,7 @@ public IEnumerator SpawnRpcDespawn([Values] NetworkUpdateStage testStage) var networkObject = m_Prefab.AddComponent(); // Make it a prefab - MultiInstanceHelpers.MakeNetworkedObjectTestPrefab(networkObject, 1); + MultiInstanceHelpers.MakeNetworkObjectTestPrefab(networkObject, 1); var handler = new SpawnRpcDespawnInstanceHandler(1); foreach (var client in clients) { diff --git a/testproject/Assets/Tests/Runtime/MultiClientConnectionApproval.cs b/testproject/Assets/Tests/Runtime/MultiClientConnectionApproval.cs index da85f8b9ab..dc9286d482 100644 --- a/testproject/Assets/Tests/Runtime/MultiClientConnectionApproval.cs +++ b/testproject/Assets/Tests/Runtime/MultiClientConnectionApproval.cs @@ -67,7 +67,7 @@ private IEnumerator ConnectionApprovalHandler(int numClients, int failureTestCou var networkObject = m_PlayerPrefab.AddComponent(); // Make it a prefab - MultiInstanceHelpers.MakeNetworkedObjectTestPrefab(networkObject); + MultiInstanceHelpers.MakeNetworkObjectTestPrefab(networkObject); // Create the player prefab override if set if (prefabOverride) @@ -75,7 +75,7 @@ private IEnumerator ConnectionApprovalHandler(int numClients, int failureTestCou // Create a default player GameObject to use m_PlayerPrefabOverride = new GameObject("PlayerPrefabOverride"); var networkObjectOverride = m_PlayerPrefabOverride.AddComponent(); - MultiInstanceHelpers.MakeNetworkedObjectTestPrefab(networkObjectOverride); + MultiInstanceHelpers.MakeNetworkObjectTestPrefab(networkObjectOverride); m_PrefabOverrideGlobalObjectIdHash = networkObjectOverride.GlobalObjectIdHash; } else From 8800ccde4390276e6d136b5239179b4422079748 Mon Sep 17 00:00:00 2001 From: "M. Fatih MAR" Date: Thu, 26 Aug 2021 00:07:59 +0100 Subject: [PATCH 2/6] fix MultiClientConnectionApproval.ConnectionApproval() test --- .../Assets/Tests/Runtime/MultiClientConnectionApproval.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/testproject/Assets/Tests/Runtime/MultiClientConnectionApproval.cs b/testproject/Assets/Tests/Runtime/MultiClientConnectionApproval.cs index dc9286d482..04b624fed3 100644 --- a/testproject/Assets/Tests/Runtime/MultiClientConnectionApproval.cs +++ b/testproject/Assets/Tests/Runtime/MultiClientConnectionApproval.cs @@ -77,6 +77,12 @@ private IEnumerator ConnectionApprovalHandler(int numClients, int failureTestCou var networkObjectOverride = m_PlayerPrefabOverride.AddComponent(); MultiInstanceHelpers.MakeNetworkObjectTestPrefab(networkObjectOverride); m_PrefabOverrideGlobalObjectIdHash = networkObjectOverride.GlobalObjectIdHash; + + server.NetworkConfig.NetworkPrefabs.Add(new NetworkPrefab { Prefab = m_PlayerPrefabOverride }); + foreach (var client in clients) + { + client.NetworkConfig.NetworkPrefabs.Add(new NetworkPrefab { Prefab = m_PlayerPrefabOverride }); + } } else { From f898733131a6de84c94892d407ce7d226e359fa9 Mon Sep 17 00:00:00 2001 From: NoelStephensUnity <73188597+NoelStephensUnity@users.noreply.github.com> Date: Wed, 25 Aug 2021 18:29:53 -0500 Subject: [PATCH 3/6] refactor Removing DefaultPayerGlobalObjectIdHashValue with new GlobalObjectIdHash goodness. --- .../Tests/Runtime/BaseMultiInstanceTest.cs | 4 +--- .../Tests/Runtime/NetworkShowHideTests.cs | 12 +++++++----- testproject/Assets/Tests/Runtime/MessageOrdering.cs | 4 ++-- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/BaseMultiInstanceTest.cs b/com.unity.netcode.gameobjects/Tests/Runtime/BaseMultiInstanceTest.cs index 4af391cada..756385a7af 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/BaseMultiInstanceTest.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/BaseMultiInstanceTest.cs @@ -14,8 +14,6 @@ public abstract class BaseMultiInstanceTest protected NetworkManager m_ServerNetworkManager; protected NetworkManager[] m_ClientNetworkManagers; - internal static uint DefaultPayerGlobalObjectIdHashValue = 7777777; - protected abstract int NbClients { get; } [UnitySetUp] @@ -96,7 +94,7 @@ public IEnumerator StartSomeClientsAndServerWithPlayers(bool useHost, int nbClie * at runtime without it being treated as a SceneObject or causing other conflicts with the Netcode. */ // Make it a prefab - MultiInstanceHelpers.MakeNetworkObjectTestPrefab(networkObject, DefaultPayerGlobalObjectIdHashValue); + MultiInstanceHelpers.MakeNetworkObjectTestPrefab(networkObject); updatePlayerPrefab(m_PlayerPrefab); // update player prefab with whatever is needed before players are spawned diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkShowHideTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkShowHideTests.cs index 62f7461c6d..94820a21b6 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkShowHideTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkShowHideTests.cs @@ -22,6 +22,7 @@ public class NetworkShowHideTests : BaseMultiInstanceTest protected override int NbClients => 2; private ulong m_ClientId0; + private GameObject m_PrefabToSpawn; private NetworkObject m_NetSpawnedObject1; private NetworkObject m_NetSpawnedObject2; @@ -37,6 +38,7 @@ public override IEnumerator Setup() updatePlayerPrefab: playerPrefab => { var networkTransform = playerPrefab.AddComponent(); + m_PrefabToSpawn = PreparePrefab(typeof(ShowHideObject)); }); } @@ -45,7 +47,7 @@ public GameObject PreparePrefab(Type type) var prefabToSpawn = new GameObject(); prefabToSpawn.AddComponent(type); var networkObjectPrefab = prefabToSpawn.AddComponent(); - MultiInstanceHelpers.MakeNetworkObjectTestPrefab(networkObjectPrefab, DefaultPayerGlobalObjectIdHashValue); + MultiInstanceHelpers.MakeNetworkObjectTestPrefab(networkObjectPrefab); m_ServerNetworkManager.NetworkConfig.NetworkPrefabs.Add(new NetworkPrefab() { Prefab = prefabToSpawn }); foreach (var clientNetworkManager in m_ClientNetworkManagers) { @@ -159,10 +161,10 @@ public IEnumerator NetworkShowHideTest() // create 3 objects - var prefabToSpawn = PreparePrefab(typeof(ShowHideObject)); - var spawnedObject1 = UnityEngine.Object.Instantiate(prefabToSpawn); - var spawnedObject2 = UnityEngine.Object.Instantiate(prefabToSpawn); - var spawnedObject3 = UnityEngine.Object.Instantiate(prefabToSpawn); + + var spawnedObject1 = UnityEngine.Object.Instantiate(m_PrefabToSpawn); + var spawnedObject2 = UnityEngine.Object.Instantiate(m_PrefabToSpawn); + var spawnedObject3 = UnityEngine.Object.Instantiate(m_PrefabToSpawn); m_NetSpawnedObject1 = spawnedObject1.GetComponent(); m_NetSpawnedObject2 = spawnedObject2.GetComponent(); m_NetSpawnedObject3 = spawnedObject3.GetComponent(); diff --git a/testproject/Assets/Tests/Runtime/MessageOrdering.cs b/testproject/Assets/Tests/Runtime/MessageOrdering.cs index aa7ffb593a..99beb6ec62 100644 --- a/testproject/Assets/Tests/Runtime/MessageOrdering.cs +++ b/testproject/Assets/Tests/Runtime/MessageOrdering.cs @@ -113,8 +113,8 @@ public IEnumerator SpawnRpcDespawn([Values] NetworkUpdateStage testStage) var networkObject = m_Prefab.AddComponent(); // Make it a prefab - MultiInstanceHelpers.MakeNetworkObjectTestPrefab(networkObject, 1); - var handler = new SpawnRpcDespawnInstanceHandler(1); + MultiInstanceHelpers.MakeNetworkObjectTestPrefab(networkObject); + var handler = new SpawnRpcDespawnInstanceHandler(networkObject.GlobalObjectIdHash); foreach (var client in clients) { client.PrefabHandler.AddHandler(networkObject, handler); From 24cc69aefd68a223542ccd57841b0e564dc3840a Mon Sep 17 00:00:00 2001 From: "M. Fatih MAR" Date: Thu, 26 Aug 2021 00:53:56 +0100 Subject: [PATCH 4/6] fix NetworkObjectMetricsTests --- .../Metrics/NetworkObjectMetricsTests.cs | 87 ++++++++++--------- 1 file changed, 44 insertions(+), 43 deletions(-) diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Metrics/NetworkObjectMetricsTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/Metrics/NetworkObjectMetricsTests.cs index b3d0f976c9..811531cd88 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/Metrics/NetworkObjectMetricsTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/Metrics/NetworkObjectMetricsTests.cs @@ -13,16 +13,16 @@ namespace Unity.Netcode.RuntimeTests.Metrics { public class NetworkObjectMetricsTests : SingleClientMetricTestBase { - const string NewNetworkObjectName = "TestNetworkObjectToSpawn"; + private const string k_NewNetworkObjectName = "TestNetworkObjectToSpawn"; - NetworkObject m_NewNetworkObject; + private NetworkObject m_NewNetworkPrefab; protected override Action UpdatePlayerPrefab => _ => { - var gameObject = new GameObject(NewNetworkObjectName); - m_NewNetworkObject = gameObject.AddComponent(); - m_NewNetworkObject.NetworkManagerOwner = m_ServerNetworkManager; - MultiInstanceHelpers.MakeNetworkObjectTestPrefab(m_NewNetworkObject); + var gameObject = new GameObject(k_NewNetworkObjectName); + m_NewNetworkPrefab = gameObject.AddComponent(); + m_NewNetworkPrefab.NetworkManagerOwner = m_ServerNetworkManager; + MultiInstanceHelpers.MakeNetworkObjectTestPrefab(m_NewNetworkPrefab); var networkPrefab = new NetworkPrefab { Prefab = gameObject }; m_ServerNetworkManager.NetworkConfig.NetworkPrefabs.Add(networkPrefab); @@ -32,12 +32,23 @@ public class NetworkObjectMetricsTests : SingleClientMetricTestBase } }; + private NetworkObject SpawnNetworkObject() + { + // Spawn another network object so we can hide multiple. + var gameObject = UnityEngine.Object.Instantiate(m_NewNetworkPrefab); // new GameObject(NewNetworkObjectName); + var networkObject = gameObject.GetComponent(); + networkObject.NetworkManagerOwner = Server; + networkObject.Spawn(); + + return networkObject; + } + [UnityTest] public IEnumerator TrackNetworkObjectSpawnSentMetric() { var waitForMetricEvent = new WaitForMetricValues(ServerMetrics.Dispatcher, MetricNames.ObjectSpawnedSent); - m_NewNetworkObject.Spawn(); + SpawnNetworkObject(); yield return waitForMetricEvent.WaitForMetricsReceived(); @@ -46,7 +57,7 @@ public IEnumerator TrackNetworkObjectSpawnSentMetric() var objectSpawned = objectSpawnedSentMetricValues.First(); Assert.AreEqual(Client.LocalClientId, objectSpawned.Connection.Id); - Assert.AreEqual(NewNetworkObjectName, objectSpawned.NetworkId.Name); + Assert.AreEqual($"{k_NewNetworkObjectName}(Clone)", objectSpawned.NetworkId.Name); Assert.AreNotEqual(0, objectSpawned.BytesCount); } @@ -55,7 +66,7 @@ public IEnumerator TrackNetworkObjectSpawnReceivedMetric() { var waitForMetricEvent = new WaitForMetricValues(ClientMetrics.Dispatcher, MetricNames.ObjectSpawnedReceived); - m_NewNetworkObject.Spawn(); + var networkObject = SpawnNetworkObject(); yield return waitForMetricEvent.WaitForMetricsReceived(); @@ -64,21 +75,21 @@ public IEnumerator TrackNetworkObjectSpawnReceivedMetric() var objectSpawned = objectSpawnedReceivedMetricValues.First(); Assert.AreEqual(Server.LocalClientId, objectSpawned.Connection.Id); - Assert.AreEqual(m_NewNetworkObject.NetworkObjectId, objectSpawned.NetworkId.NetworkId); - Assert.AreEqual($"{NewNetworkObjectName}(Clone)", objectSpawned.NetworkId.Name); + Assert.AreEqual(networkObject.NetworkObjectId, objectSpawned.NetworkId.NetworkId); + Assert.AreEqual($"{k_NewNetworkObjectName}(Clone)", objectSpawned.NetworkId.Name); Assert.AreNotEqual(0, objectSpawned.BytesCount); } [UnityTest] public IEnumerator TrackNetworkObjectDestroySentMetric() { - m_NewNetworkObject.Spawn(); + var networkObject = SpawnNetworkObject(); yield return new WaitForSeconds(0.2f); var waitForMetricEvent = new WaitForMetricValues(ServerMetrics.Dispatcher, MetricNames.ObjectDestroyedSent); - Server.SpawnManager.OnDespawnObject(m_NewNetworkObject, true); + Server.SpawnManager.OnDespawnObject(networkObject, true); yield return waitForMetricEvent.WaitForMetricsReceived(); @@ -87,20 +98,20 @@ public IEnumerator TrackNetworkObjectDestroySentMetric() var objectDestroyed = objectDestroyedSentMetricValues.Last(); Assert.AreEqual(Client.LocalClientId, objectDestroyed.Connection.Id); - Assert.AreEqual(NewNetworkObjectName, objectDestroyed.NetworkId.Name); + Assert.AreEqual($"{k_NewNetworkObjectName}(Clone)", objectDestroyed.NetworkId.Name); Assert.AreNotEqual(0, objectDestroyed.BytesCount); } [UnityTest] public IEnumerator TrackNetworkObjectDestroyReceivedMetric() { - m_NewNetworkObject.Spawn(); + var networkObject = SpawnNetworkObject(); yield return new WaitForSeconds(0.2f); var waitForMetricEvent = new WaitForMetricValues(ClientMetrics.Dispatcher, MetricNames.ObjectDestroyedReceived); - Server.SpawnManager.OnDespawnObject(m_NewNetworkObject, true); + Server.SpawnManager.OnDespawnObject(networkObject, true); yield return waitForMetricEvent.WaitForMetricsReceived(); @@ -109,31 +120,26 @@ public IEnumerator TrackNetworkObjectDestroyReceivedMetric() var objectDestroyed = objectDestroyedReceivedMetricValues.First(); Assert.AreEqual(Server.LocalClientId, objectDestroyed.Connection.Id); - Assert.AreEqual(m_NewNetworkObject.NetworkObjectId, objectDestroyed.NetworkId.NetworkId); - Assert.AreEqual($"{NewNetworkObjectName}(Clone)", objectDestroyed.NetworkId.Name); + Assert.AreEqual(networkObject.NetworkObjectId, objectDestroyed.NetworkId.NetworkId); + Assert.AreEqual($"{k_NewNetworkObjectName}(Clone)", objectDestroyed.NetworkId.Name); Assert.AreNotEqual(0, objectDestroyed.BytesCount); } [UnityTest] public IEnumerator TrackMultipleNetworkObjectSpawnSentMetric() { - m_NewNetworkObject.Spawn(); - - // Spawn another network object so we can hide multiple. - var gameObject = new GameObject(NewNetworkObjectName); - var anotherNetworkObject = gameObject.AddComponent(); - anotherNetworkObject.NetworkManagerOwner = Server; - anotherNetworkObject.Spawn(); + var networkObject1 = SpawnNetworkObject(); + var networkObject2 = SpawnNetworkObject(); yield return new WaitForSeconds(0.2f); - NetworkObject.NetworkHide(new List{m_NewNetworkObject, anotherNetworkObject}, Client.LocalClientId); + NetworkObject.NetworkHide(new List { networkObject1, networkObject2 }, Client.LocalClientId); yield return new WaitForSeconds(0.2f); var waitForMetricEvent = new WaitForMetricValues(ServerMetrics.Dispatcher, MetricNames.ObjectSpawnedSent); - NetworkObject.NetworkShow(new List{m_NewNetworkObject, anotherNetworkObject}, Client.LocalClientId); + NetworkObject.NetworkShow(new List { networkObject1, networkObject2 }, Client.LocalClientId); yield return waitForMetricEvent.WaitForMetricsReceived(); @@ -143,14 +149,14 @@ public IEnumerator TrackMultipleNetworkObjectSpawnSentMetric() objectSpawnedSentMetricValues, Has.Exactly(1).Matches( x => Client.LocalClientId == x.Connection.Id - && x.NetworkId.NetworkId == m_NewNetworkObject.NetworkObjectId - && x.NetworkId.Name == m_NewNetworkObject.name)); + && x.NetworkId.NetworkId == networkObject1.NetworkObjectId + && x.NetworkId.Name == networkObject1.name)); Assert.That( objectSpawnedSentMetricValues, Has.Exactly(1).Matches( x => Client.LocalClientId == x.Connection.Id - && x.NetworkId.NetworkId == anotherNetworkObject.NetworkObjectId - && x.NetworkId.Name == anotherNetworkObject.name)); + && x.NetworkId.NetworkId == networkObject2.NetworkObjectId + && x.NetworkId.Name == networkObject2.name)); Assert.AreEqual(1, objectSpawnedSentMetricValues.Select(x => x.BytesCount).Distinct().Count()); Assert.That(objectSpawnedSentMetricValues.Select(x => x.BytesCount), Has.All.Not.EqualTo(0)); @@ -159,19 +165,14 @@ public IEnumerator TrackMultipleNetworkObjectSpawnSentMetric() [UnityTest] public IEnumerator TrackMultipleNetworkObjectDestroySentMetric() { - m_NewNetworkObject.Spawn(); - - // Spawn another network object so we can hide multiple. - var gameObject = new GameObject(NewNetworkObjectName); - var anotherNetworkObject = gameObject.AddComponent(); - anotherNetworkObject.NetworkManagerOwner = Server; - anotherNetworkObject.Spawn(); + var networkObject1 = SpawnNetworkObject(); + var networkObject2 = SpawnNetworkObject(); yield return new WaitForSeconds(0.2f); var waitForMetricEvent = new WaitForMetricValues(ServerMetrics.Dispatcher, MetricNames.ObjectDestroyedSent); - NetworkObject.NetworkHide(new List{m_NewNetworkObject, anotherNetworkObject}, Client.LocalClientId); + NetworkObject.NetworkHide(new List { networkObject1, networkObject2 }, Client.LocalClientId); yield return waitForMetricEvent.WaitForMetricsReceived(); @@ -181,14 +182,14 @@ public IEnumerator TrackMultipleNetworkObjectDestroySentMetric() objectDestroyedSentMetricValues, Has.Exactly(1).Matches( x => Client.LocalClientId == x.Connection.Id - && x.NetworkId.NetworkId == m_NewNetworkObject.NetworkObjectId - && x.NetworkId.Name == m_NewNetworkObject.name)); + && x.NetworkId.NetworkId == networkObject1.NetworkObjectId + && x.NetworkId.Name == networkObject1.name)); Assert.That( objectDestroyedSentMetricValues, Has.Exactly(1).Matches( x => Client.LocalClientId == x.Connection.Id - && x.NetworkId.NetworkId == anotherNetworkObject.NetworkObjectId - && x.NetworkId.Name == anotherNetworkObject.name)); + && x.NetworkId.NetworkId == networkObject2.NetworkObjectId + && x.NetworkId.Name == networkObject2.name)); Assert.AreEqual(1, objectDestroyedSentMetricValues.Select(x => x.BytesCount).Distinct().Count()); Assert.That(objectDestroyedSentMetricValues.Select(x => x.BytesCount), Has.All.Not.EqualTo(0)); From a1878b6ff7a0ac4c453fe54930eeaafbf60cff2f Mon Sep 17 00:00:00 2001 From: "M. Fatih MAR" Date: Thu, 26 Aug 2021 01:08:40 +0100 Subject: [PATCH 5/6] remove `DefaultPayerGlobalObjectIdHashValue` from OwnershipChangeMetricsTests --- .../Tests/Runtime/Metrics/OwnershipChangeMetricsTests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Metrics/OwnershipChangeMetricsTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/Metrics/OwnershipChangeMetricsTests.cs index 81fba71b58..7d3aeb9948 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/Metrics/OwnershipChangeMetricsTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/Metrics/OwnershipChangeMetricsTests.cs @@ -17,7 +17,7 @@ public IEnumerator TrackOwnershipChangeSentMetric() { var gameObject = new GameObject(Guid.NewGuid().ToString()); var networkObject = gameObject.AddComponent(); - MultiInstanceHelpers.MakeNetworkObjectTestPrefab(networkObject, DefaultPayerGlobalObjectIdHashValue); + MultiInstanceHelpers.MakeNetworkObjectTestPrefab(networkObject); networkObject.NetworkManagerOwner = Server; networkObject.Spawn(); @@ -42,7 +42,7 @@ public IEnumerator TrackOwnershipChangeReceivedMetric() { var gameObject = new GameObject(Guid.NewGuid().ToString()); var networkObject = gameObject.AddComponent(); - MultiInstanceHelpers.MakeNetworkObjectTestPrefab(networkObject, DefaultPayerGlobalObjectIdHashValue); + MultiInstanceHelpers.MakeNetworkObjectTestPrefab(networkObject); networkObject.NetworkManagerOwner = Server; networkObject.Spawn(); From 05e385b4c8dc7e9632c51e0ecc029c319180c195 Mon Sep 17 00:00:00 2001 From: "M. Fatih MAR" Date: Thu, 26 Aug 2021 01:33:46 +0100 Subject: [PATCH 6/6] fix OwnershipChangeMetricsTests --- .../Metrics/NetworkObjectMetricsTests.cs | 4 +- .../Metrics/OwnershipChangeMetricsTests.cs | 40 ++++++++++++++----- 2 files changed, 31 insertions(+), 13 deletions(-) diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Metrics/NetworkObjectMetricsTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/Metrics/NetworkObjectMetricsTests.cs index 811531cd88..ff52f64872 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/Metrics/NetworkObjectMetricsTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/Metrics/NetworkObjectMetricsTests.cs @@ -14,18 +14,16 @@ namespace Unity.Netcode.RuntimeTests.Metrics public class NetworkObjectMetricsTests : SingleClientMetricTestBase { private const string k_NewNetworkObjectName = "TestNetworkObjectToSpawn"; - private NetworkObject m_NewNetworkPrefab; protected override Action UpdatePlayerPrefab => _ => { var gameObject = new GameObject(k_NewNetworkObjectName); m_NewNetworkPrefab = gameObject.AddComponent(); - m_NewNetworkPrefab.NetworkManagerOwner = m_ServerNetworkManager; MultiInstanceHelpers.MakeNetworkObjectTestPrefab(m_NewNetworkPrefab); + var networkPrefab = new NetworkPrefab { Prefab = gameObject }; m_ServerNetworkManager.NetworkConfig.NetworkPrefabs.Add(networkPrefab); - foreach (var client in m_ClientNetworkManagers) { client.NetworkConfig.NetworkPrefabs.Add(networkPrefab); diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Metrics/OwnershipChangeMetricsTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/Metrics/OwnershipChangeMetricsTests.cs index 7d3aeb9948..47d5c86715 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/Metrics/OwnershipChangeMetricsTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/Metrics/OwnershipChangeMetricsTests.cs @@ -12,15 +12,39 @@ namespace Unity.Netcode.RuntimeTests.Metrics { public class OwnershipChangeMetricsTests : SingleClientMetricTestBase { - [UnityTest] - public IEnumerator TrackOwnershipChangeSentMetric() + private const string k_NewNetworkObjectName = "TestNetworkObjectToSpawn"; + private NetworkObject m_NewNetworkPrefab; + + protected override Action UpdatePlayerPrefab => _ => { - var gameObject = new GameObject(Guid.NewGuid().ToString()); - var networkObject = gameObject.AddComponent(); - MultiInstanceHelpers.MakeNetworkObjectTestPrefab(networkObject); + var gameObject = new GameObject(k_NewNetworkObjectName); + m_NewNetworkPrefab = gameObject.AddComponent(); + MultiInstanceHelpers.MakeNetworkObjectTestPrefab(m_NewNetworkPrefab); + + var networkPrefab = new NetworkPrefab { Prefab = gameObject }; + m_ServerNetworkManager.NetworkConfig.NetworkPrefabs.Add(networkPrefab); + foreach (var client in m_ClientNetworkManagers) + { + client.NetworkConfig.NetworkPrefabs.Add(networkPrefab); + } + }; + + private NetworkObject SpawnNetworkObject() + { + // Spawn another network object so we can hide multiple. + var gameObject = UnityEngine.Object.Instantiate(m_NewNetworkPrefab); // new GameObject(NewNetworkObjectName); + var networkObject = gameObject.GetComponent(); networkObject.NetworkManagerOwner = Server; networkObject.Spawn(); + return networkObject; + } + + [UnityTest] + public IEnumerator TrackOwnershipChangeSentMetric() + { + var networkObject = SpawnNetworkObject(); + yield return new WaitForSeconds(0.2f); var waitForMetricValues = new WaitForMetricValues(ServerMetrics.Dispatcher, MetricNames.OwnershipChangeSent); @@ -40,11 +64,7 @@ public IEnumerator TrackOwnershipChangeSentMetric() [UnityTest] public IEnumerator TrackOwnershipChangeReceivedMetric() { - var gameObject = new GameObject(Guid.NewGuid().ToString()); - var networkObject = gameObject.AddComponent(); - MultiInstanceHelpers.MakeNetworkObjectTestPrefab(networkObject); - networkObject.NetworkManagerOwner = Server; - networkObject.Spawn(); + var networkObject = SpawnNetworkObject(); yield return new WaitForSeconds(0.2f);