diff --git a/com.unity.netcode.gameobjects/Components/NetworkRigidbody.cs b/com.unity.netcode.gameobjects/Components/NetworkRigidbody.cs index 82538717e4..2b64cbfc62 100644 --- a/com.unity.netcode.gameobjects/Components/NetworkRigidbody.cs +++ b/com.unity.netcode.gameobjects/Components/NetworkRigidbody.cs @@ -11,6 +11,7 @@ namespace Unity.Netcode.Components public class NetworkRigidbody : NetworkBehaviour { private Rigidbody m_Rigidbody; + private NetworkTransform m_NetworkTransform; private bool m_OriginalKinematic; @@ -20,25 +21,25 @@ public class NetworkRigidbody : NetworkBehaviour /// /// Gets a bool value indicating whether this on this peer currently holds authority. /// - internal bool HasAuthority => NetworkManager.IsServer; // TODO update this once we support owner authoritative NetworkTransform. + private bool HasAuthority => m_NetworkTransform.CanCommitToTransform; private void Awake() { m_Rigidbody = GetComponent(); + m_NetworkTransform = GetComponent(); } - // Currently commented out because it is not needed as authority currently can't change at runtime. - // private void FixedUpdate() - // { - // if (NetworkManager.IsListening) - // { - // if (HasAuthority != m_IsAuthority) - // { - // m_IsAuthority = HasAuthority; - // UpdateRigidbodyKinematicMode(); - // } - // } - // } + private void FixedUpdate() + { + if (NetworkManager.IsListening) + { + if (HasAuthority != m_IsAuthority) + { + m_IsAuthority = HasAuthority; + UpdateRigidbodyKinematicMode(); + } + } + } // Puts the rigidbody in a kinematic non-interpolated mode on everyone but the server. private void UpdateRigidbodyKinematicMode() diff --git a/com.unity.netcode.gameobjects/Components/NetworkRigidbody2D.cs b/com.unity.netcode.gameobjects/Components/NetworkRigidbody2D.cs index c17cbe1c66..4222b53540 100644 --- a/com.unity.netcode.gameobjects/Components/NetworkRigidbody2D.cs +++ b/com.unity.netcode.gameobjects/Components/NetworkRigidbody2D.cs @@ -11,6 +11,7 @@ namespace Unity.Netcode.Components public class NetworkRigidbody2D : NetworkBehaviour { private Rigidbody2D m_Rigidbody; + private NetworkTransform m_NetworkTransform; private bool m_OriginalKinematic; @@ -20,25 +21,25 @@ public class NetworkRigidbody2D : NetworkBehaviour /// /// Gets a bool value indicating whether this on this peer currently holds authority. /// - internal bool HasAuthority => NetworkManager.IsServer; // TODO update this once we support owner authoritative NetworkTransform. + private bool HasAuthority => m_NetworkTransform.CanCommitToTransform; private void Awake() { m_Rigidbody = GetComponent(); + m_NetworkTransform = GetComponent(); } - // Currently commented out because it is not needed as authority currently can't change at runtime. - // private void FixedUpdate() - // { - // if (NetworkManager.IsListening) - // { - // if (HasAuthority != m_IsAuthority) - // { - // m_IsAuthority = HasAuthority; - // UpdateRigidbodyKinematicMode(); - // } - // } - // } + private void FixedUpdate() + { + if (NetworkManager.IsListening) + { + if (HasAuthority != m_IsAuthority) + { + m_IsAuthority = HasAuthority; + UpdateRigidbodyKinematicMode(); + } + } + } // Puts the rigidbody in a kinematic non-interpolated mode on everyone but the server. private void UpdateRigidbodyKinematicMode() diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Physics/NetworkRigidbody2DTest.cs b/com.unity.netcode.gameobjects/Tests/Runtime/Physics/NetworkRigidbody2DTest.cs index 10e10914e8..03c5cc4f26 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/Physics/NetworkRigidbody2DTest.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/Physics/NetworkRigidbody2DTest.cs @@ -6,12 +6,12 @@ namespace Unity.Netcode.RuntimeTests.Physics { - public class NetworkRigidbody2DDynamicTest : NetworkRigidbodyTestBase + public class NetworkRigidbody2DDynamicTest : NetworkRigidbody2DTestBase { public override bool Kinematic => false; } - public class NetworkRigidbody2DKinematicTest : NetworkRigidbodyTestBase + public class NetworkRigidbody2DKinematicTest : NetworkRigidbody2DTestBase { public override bool Kinematic => true; } @@ -29,7 +29,7 @@ public override IEnumerator Setup() { playerPrefab.AddComponent(); playerPrefab.AddComponent(); - playerPrefab.AddComponent(); + playerPrefab.AddComponent(); playerPrefab.GetComponent().isKinematic = Kinematic; }); } @@ -54,8 +54,7 @@ public IEnumerator TestRigidbodyKinematicEnableDisable() Assert.IsNotNull(serverPlayer); Assert.IsNotNull(clientPlayer); - int waitFor = Time.frameCount + 2; - yield return new WaitUntil(() => Time.frameCount >= waitFor); + yield return NetworkRigidbodyTestBase.WaitForFrames(5); // server rigidbody has authority and should have a kinematic mode of false Assert.True(serverPlayer.GetComponent().isKinematic == Kinematic); @@ -66,12 +65,14 @@ public IEnumerator TestRigidbodyKinematicEnableDisable() // despawn the server player, (but keep it around on the server) serverPlayer.GetComponent().Despawn(false); - yield return null; + yield return NetworkRigidbodyTestBase.WaitForFrames(5); Assert.IsTrue(serverPlayer.GetComponent().isKinematic == Kinematic); - yield return null; + yield return NetworkRigidbodyTestBase.WaitForFrames(5); + Assert.IsTrue(clientPlayer == null); // safety check that object is actually despawned. } + } } diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Physics/NetworkRigidbodyTest.cs b/com.unity.netcode.gameobjects/Tests/Runtime/Physics/NetworkRigidbodyTest.cs index ad6f9ca10d..0f5a59189f 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/Physics/NetworkRigidbodyTest.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/Physics/NetworkRigidbodyTest.cs @@ -54,8 +54,7 @@ public IEnumerator TestRigidbodyKinematicEnableDisable() Assert.IsNotNull(serverPlayer); Assert.IsNotNull(clientPlayer); - int waitFor = Time.frameCount + 2; - yield return new WaitUntil(() => Time.frameCount >= waitFor); + yield return WaitForFrames(5); // server rigidbody has authority and should have a kinematic mode of false Assert.True(serverPlayer.GetComponent().isKinematic == Kinematic); @@ -66,12 +65,19 @@ public IEnumerator TestRigidbodyKinematicEnableDisable() // despawn the server player (but keep it around on the server) serverPlayer.GetComponent().Despawn(false); - yield return null; + yield return WaitForFrames(5); Assert.IsTrue(serverPlayer.GetComponent().isKinematic == Kinematic); - yield return null; + yield return WaitForFrames(5); + Assert.IsTrue(clientPlayer == null); // safety check that object is actually despawned. } + + public static IEnumerator WaitForFrames(int count) + { + int nextFrameNumber = Time.frameCount + count; + yield return new WaitUntil(() => Time.frameCount >= nextFrameNumber); + } } } diff --git a/testproject/Assets/Tests/Runtime/Physics.meta b/testproject/Assets/Tests/Runtime/Physics.meta new file mode 100644 index 0000000000..de0808f1a7 --- /dev/null +++ b/testproject/Assets/Tests/Runtime/Physics.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: efc90b4d4d76f7a48ad1cf726a3a193e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/testproject/Assets/Tests/Runtime/Physics/NetworkRigidbody2DCntChangeOwnershipTest.cs b/testproject/Assets/Tests/Runtime/Physics/NetworkRigidbody2DCntChangeOwnershipTest.cs new file mode 100644 index 0000000000..6a97112f86 --- /dev/null +++ b/testproject/Assets/Tests/Runtime/Physics/NetworkRigidbody2DCntChangeOwnershipTest.cs @@ -0,0 +1,95 @@ +// using System.Collections; +// using NUnit.Framework; +// using Unity.Netcode.Components; +// using Unity.Netcode.Samples; +// using UnityEngine; +// using UnityEngine.TestTools; +// +// // Tests for ClientNetworkTransform (CNT) + NetworkRigidbody. This test is in TestProject because it needs access to ClientNetworkTransform +// namespace Unity.Netcode.RuntimeTests.Physics +// { +// public class NetworkRigidbody2DDynamicCntChangeOwnershipTest : NetworkRigidbody2DCntChangeOwnershipTestBase +// { +// public override bool Kinematic => false; +// } +// +// public class NetworkRigidbody2DKinematicCntChangeOwnershipTest : NetworkRigidbody2DCntChangeOwnershipTestBase +// { +// public override bool Kinematic => true; +// } +// +// public abstract class NetworkRigidbody2DCntChangeOwnershipTestBase : BaseMultiInstanceTest +// { +// protected override int NbClients => 1; +// +// public abstract bool Kinematic { get; } +// +// [UnitySetUp] +// public override IEnumerator Setup() +// { +// yield return StartSomeClientsAndServerWithPlayers(true, NbClients, playerPrefab => +// { +// playerPrefab.AddComponent(); +// playerPrefab.AddComponent(); +// playerPrefab.AddComponent(); +// playerPrefab.GetComponent().isKinematic = Kinematic; +// }); +// } +// /// +// /// Tests that a server can destroy a NetworkObject and that it gets despawned correctly. +// /// +// /// +// [UnityTest] +// public IEnumerator TestRigidbodyKinematicEnableDisable() +// { +// // This is the *SERVER VERSION* of the *CLIENT PLAYER* +// var serverClientPlayerResult = new MultiInstanceHelpers.CoroutineResultWrapper(); +// yield return MultiInstanceHelpers.Run(MultiInstanceHelpers.GetNetworkObjectByRepresentation((x => x.IsPlayerObject && x.OwnerClientId == m_ClientNetworkManagers[0].LocalClientId), m_ServerNetworkManager, serverClientPlayerResult)); +// var serverPlayer = serverClientPlayerResult.Result.gameObject; +// +// // This is the *CLIENT VERSION* of the *CLIENT PLAYER* +// var clientClientPlayerResult = new MultiInstanceHelpers.CoroutineResultWrapper(); +// yield return MultiInstanceHelpers.Run(MultiInstanceHelpers.GetNetworkObjectByRepresentation((x => x.IsPlayerObject && x.OwnerClientId == m_ClientNetworkManagers[0].LocalClientId), m_ClientNetworkManagers[0], clientClientPlayerResult)); +// var clientPlayer = clientClientPlayerResult.Result.gameObject; +// +// Assert.IsNotNull(serverPlayer); +// Assert.IsNotNull(clientPlayer); +// +// int waitFor = Time.frameCount + 2; +// yield return new WaitUntil(() => Time.frameCount >= waitFor); +// +// TestKinematicSetCorrectly(clientPlayer, serverPlayer); +// +// +// // give server ownership over the player +// +// serverPlayer.GetComponent().ChangeOwnership(m_ServerNetworkManager.ServerClientId); +// +// yield return null; +// yield return null; +// +// // server should now be able to commit to transform +// TestKinematicSetCorrectly(serverPlayer, clientPlayer); +// +// // return ownership to client +// serverPlayer.GetComponent().ChangeOwnership(m_ClientNetworkManagers[0].LocalClientId); +// yield return null; +// yield return null; +// +// // client should again be able to commit +// TestKinematicSetCorrectly(clientPlayer, serverPlayer); +// } +// +// +// +// private void TestKinematicSetCorrectly(GameObject canCommitPlayer, GameObject canNotCommitPlayer) +// { +// +// // can commit player has authority and should have a kinematic mode of false (or true in case body was already kinematic). +// Assert.True(canCommitPlayer.GetComponent().isKinematic == Kinematic); +// +// // can not commit player has no authority and should have a kinematic mode of true +// Assert.True(canNotCommitPlayer.GetComponent().isKinematic); +// } +// } +// } diff --git a/testproject/Assets/Tests/Runtime/Physics/NetworkRigidbody2DCntChangeOwnershipTest.cs.meta b/testproject/Assets/Tests/Runtime/Physics/NetworkRigidbody2DCntChangeOwnershipTest.cs.meta new file mode 100644 index 0000000000..b1c3736256 --- /dev/null +++ b/testproject/Assets/Tests/Runtime/Physics/NetworkRigidbody2DCntChangeOwnershipTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a51c7f7b93f04e3499089963d9bbb254 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/testproject/Assets/Tests/Runtime/Physics/NetworkRigidbody2DCntTest.cs b/testproject/Assets/Tests/Runtime/Physics/NetworkRigidbody2DCntTest.cs new file mode 100644 index 0000000000..8270bedc20 --- /dev/null +++ b/testproject/Assets/Tests/Runtime/Physics/NetworkRigidbody2DCntTest.cs @@ -0,0 +1,82 @@ +// using System.Collections; +// using NUnit.Framework; +// using Unity.Netcode.Components; +// using Unity.Netcode.Samples; +// using UnityEngine; +// using UnityEngine.TestTools; +// +// // Tests for ClientNetworkTransform (CNT) + NetworkRigidbody2D. This test is in TestProject because it needs access to ClientNetworkTransform +// namespace Unity.Netcode.RuntimeTests.Physics +// { +// public class NetworkRigidbody2DDynamicCntTest : NetworkRigidbody2DCntTestBase +// { +// public override bool Kinematic => false; +// } +// +// public class NetworkRigidbody2DKinematicCntTest : NetworkRigidbody2DCntTestBase +// { +// public override bool Kinematic => true; +// } +// +// public abstract class NetworkRigidbody2DCntTestBase : BaseMultiInstanceTest +// { +// protected override int NbClients => 1; +// +// public abstract bool Kinematic { get; } +// +// [UnitySetUp] +// public override IEnumerator Setup() +// { +// yield return StartSomeClientsAndServerWithPlayers(true, NbClients, playerPrefab => +// { +// playerPrefab.AddComponent(); +// playerPrefab.AddComponent(); +// playerPrefab.AddComponent(); +// playerPrefab.GetComponent().isKinematic = Kinematic; +// }); +// } +// +// /// +// /// Tests that a server can destroy a NetworkObject and that it gets despawned correctly. +// /// +// /// +// [UnityTest] +// public IEnumerator TestRigidbodyKinematicEnableDisable() +// { +// // This is the *SERVER VERSION* of the *CLIENT PLAYER* +// var serverClientPlayerResult = new MultiInstanceHelpers.CoroutineResultWrapper(); +// yield return MultiInstanceHelpers.Run(MultiInstanceHelpers.GetNetworkObjectByRepresentation((x => x.IsPlayerObject && x.OwnerClientId == m_ClientNetworkManagers[0].LocalClientId), m_ServerNetworkManager, serverClientPlayerResult)); +// var serverPlayer = serverClientPlayerResult.Result.gameObject; +// +// // This is the *CLIENT VERSION* of the *CLIENT PLAYER* +// var clientClientPlayerResult = new MultiInstanceHelpers.CoroutineResultWrapper(); +// yield return MultiInstanceHelpers.Run(MultiInstanceHelpers.GetNetworkObjectByRepresentation((x => x.IsPlayerObject && x.OwnerClientId == m_ClientNetworkManagers[0].LocalClientId), m_ClientNetworkManagers[0], clientClientPlayerResult)); +// var clientPlayer = clientClientPlayerResult.Result.gameObject; +// +// Assert.IsNotNull(serverPlayer); +// Assert.IsNotNull(clientPlayer); +// +// int waitFor = Time.frameCount + 2; +// yield return new WaitUntil(() => Time.frameCount >= waitFor); +// +// TestKinematicSetCorrectly(clientPlayer, serverPlayer); +// +// // despawn the server player +// serverPlayer.GetComponent().Despawn(false); +// +// yield return null; +// yield return null; +// Assert.IsTrue(clientPlayer == null); // safety check that object is actually despawned. +// } +// +// private void TestKinematicSetCorrectly(GameObject canCommitPlayer, GameObject canNotCommitPlayer) +// { +// +// // can commit player has authority and should have a kinematic mode of false (or true in case body was already kinematic). +// Assert.True(canCommitPlayer.GetComponent().isKinematic == Kinematic); +// +// // can not commit player has no authority and should have a kinematic mode of true +// Assert.True(canNotCommitPlayer.GetComponent().isKinematic); +// } +// } +// } diff --git a/testproject/Assets/Tests/Runtime/Physics/NetworkRigidbody2DCntTest.cs.meta b/testproject/Assets/Tests/Runtime/Physics/NetworkRigidbody2DCntTest.cs.meta new file mode 100644 index 0000000000..f0d4cff600 --- /dev/null +++ b/testproject/Assets/Tests/Runtime/Physics/NetworkRigidbody2DCntTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5ae5587c06cba7a46b93ee6774741c0d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/testproject/Assets/Tests/Runtime/Physics/NetworkRigidbodyCntChangeOwnershipTest.cs b/testproject/Assets/Tests/Runtime/Physics/NetworkRigidbodyCntChangeOwnershipTest.cs new file mode 100644 index 0000000000..781ed22a9e --- /dev/null +++ b/testproject/Assets/Tests/Runtime/Physics/NetworkRigidbodyCntChangeOwnershipTest.cs @@ -0,0 +1,95 @@ +// using System.Collections; +// using NUnit.Framework; +// using Unity.Netcode.Components; +// using Unity.Netcode.Samples; +// using UnityEngine; +// using UnityEngine.TestTools; +// +// // Tests for ClientNetworkTransform (CNT) + NetworkRigidbody. This test is in TestProject because it needs access to ClientNetworkTransform +// namespace Unity.Netcode.RuntimeTests.Physics +// { +// public class NetworkRigidbodyDynamicCntChangeOwnershipTest : NetworkRigidbodyCntChangeOwnershipTestBase +// { +// public override bool Kinematic => false; +// } +// +// public class NetworkRigidbodyKinematicCntChangeOwnershipTest : NetworkRigidbodyCntChangeOwnershipTestBase +// { +// public override bool Kinematic => true; +// } +// +// public abstract class NetworkRigidbodyCntChangeOwnershipTestBase : BaseMultiInstanceTest +// { +// protected override int NbClients => 1; +// +// public abstract bool Kinematic { get; } +// +// [UnitySetUp] +// public override IEnumerator Setup() +// { +// yield return StartSomeClientsAndServerWithPlayers(true, NbClients, playerPrefab => +// { +// playerPrefab.AddComponent(); +// playerPrefab.AddComponent(); +// playerPrefab.AddComponent(); +// playerPrefab.GetComponent().isKinematic = Kinematic; +// }); +// } +// /// +// /// Tests that a server can destroy a NetworkObject and that it gets despawned correctly. +// /// +// /// +// [UnityTest] +// public IEnumerator TestRigidbodyKinematicEnableDisable() +// { +// // This is the *SERVER VERSION* of the *CLIENT PLAYER* +// var serverClientPlayerResult = new MultiInstanceHelpers.CoroutineResultWrapper(); +// yield return MultiInstanceHelpers.Run(MultiInstanceHelpers.GetNetworkObjectByRepresentation((x => x.IsPlayerObject && x.OwnerClientId == m_ClientNetworkManagers[0].LocalClientId), m_ServerNetworkManager, serverClientPlayerResult)); +// var serverPlayer = serverClientPlayerResult.Result.gameObject; +// +// // This is the *CLIENT VERSION* of the *CLIENT PLAYER* +// var clientClientPlayerResult = new MultiInstanceHelpers.CoroutineResultWrapper(); +// yield return MultiInstanceHelpers.Run(MultiInstanceHelpers.GetNetworkObjectByRepresentation((x => x.IsPlayerObject && x.OwnerClientId == m_ClientNetworkManagers[0].LocalClientId), m_ClientNetworkManagers[0], clientClientPlayerResult)); +// var clientPlayer = clientClientPlayerResult.Result.gameObject; +// +// Assert.IsNotNull(serverPlayer); +// Assert.IsNotNull(clientPlayer); +// +// int waitFor = Time.frameCount + 2; +// yield return new WaitUntil(() => Time.frameCount >= waitFor); +// +// TestKinematicSetCorrectly(clientPlayer, serverPlayer); +// +// +// // give server ownership over the player +// +// serverPlayer.GetComponent().ChangeOwnership(m_ServerNetworkManager.ServerClientId); +// +// yield return null; +// yield return null; +// +// // server should now be able to commit to transform +// TestKinematicSetCorrectly(serverPlayer, clientPlayer); +// +// // return ownership to client +// serverPlayer.GetComponent().ChangeOwnership(m_ClientNetworkManagers[0].LocalClientId); +// yield return null; +// yield return null; +// +// // client should again be able to commit +// TestKinematicSetCorrectly(clientPlayer, serverPlayer); +// } +// +// +// +// private void TestKinematicSetCorrectly(GameObject canCommitPlayer, GameObject canNotCommitPlayer) +// { +// +// // can commit player has authority and should have a kinematic mode of false (or true in case body was already kinematic). +// Assert.True(canCommitPlayer.GetComponent().isKinematic == Kinematic); +// +// // can not commit player has no authority and should have a kinematic mode of true +// Assert.True(canNotCommitPlayer.GetComponent().isKinematic); +// } +// } +// } diff --git a/testproject/Assets/Tests/Runtime/Physics/NetworkRigidbodyCntChangeOwnershipTest.cs.meta b/testproject/Assets/Tests/Runtime/Physics/NetworkRigidbodyCntChangeOwnershipTest.cs.meta new file mode 100644 index 0000000000..3eb4f88f5b --- /dev/null +++ b/testproject/Assets/Tests/Runtime/Physics/NetworkRigidbodyCntChangeOwnershipTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 941008c8040f03c44bd835d24b073260 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/testproject/Assets/Tests/Runtime/Physics/NetworkRigidbodyCntTest.cs b/testproject/Assets/Tests/Runtime/Physics/NetworkRigidbodyCntTest.cs new file mode 100644 index 0000000000..4cfb9faa04 --- /dev/null +++ b/testproject/Assets/Tests/Runtime/Physics/NetworkRigidbodyCntTest.cs @@ -0,0 +1,82 @@ +// using System.Collections; +// using NUnit.Framework; +// using Unity.Netcode.Components; +// using Unity.Netcode.Samples; +// using UnityEngine; +// using UnityEngine.TestTools; +// +// // Tests for ClientNetworkTransform (CNT) + NetworkRigidbody. This test is in TestProject because it needs access to ClientNetworkTransform +// namespace Unity.Netcode.RuntimeTests.Physics +// { +// public class NetworkRigidbodyDynamicCntTest : NetworkRigidbodyCntTestBase +// { +// public override bool Kinematic => false; +// } +// +// public class NetworkRigidbodyKinematicCntTest : NetworkRigidbodyCntTestBase +// { +// public override bool Kinematic => true; +// } +// +// public abstract class NetworkRigidbodyCntTestBase : BaseMultiInstanceTest +// { +// protected override int NbClients => 1; +// +// public abstract bool Kinematic { get; } +// +// [UnitySetUp] +// public override IEnumerator Setup() +// { +// yield return StartSomeClientsAndServerWithPlayers(true, NbClients, playerPrefab => +// { +// playerPrefab.AddComponent(); +// playerPrefab.AddComponent(); +// playerPrefab.AddComponent(); +// playerPrefab.GetComponent().isKinematic = Kinematic; +// }); +// } +// /// +// /// Tests that a server can destroy a NetworkObject and that it gets despawned correctly. +// /// +// /// +// [UnityTest] +// public IEnumerator TestRigidbodyKinematicEnableDisable() +// { +// // This is the *SERVER VERSION* of the *CLIENT PLAYER* +// var serverClientPlayerResult = new MultiInstanceHelpers.CoroutineResultWrapper(); +// yield return MultiInstanceHelpers.Run(MultiInstanceHelpers.GetNetworkObjectByRepresentation((x => x.IsPlayerObject && x.OwnerClientId == m_ClientNetworkManagers[0].LocalClientId), m_ServerNetworkManager, serverClientPlayerResult)); +// var serverPlayer = serverClientPlayerResult.Result.gameObject; +// +// // This is the *CLIENT VERSION* of the *CLIENT PLAYER* +// var clientClientPlayerResult = new MultiInstanceHelpers.CoroutineResultWrapper(); +// yield return MultiInstanceHelpers.Run(MultiInstanceHelpers.GetNetworkObjectByRepresentation((x => x.IsPlayerObject && x.OwnerClientId == m_ClientNetworkManagers[0].LocalClientId), m_ClientNetworkManagers[0], clientClientPlayerResult)); +// var clientPlayer = clientClientPlayerResult.Result.gameObject; +// +// Assert.IsNotNull(serverPlayer); +// Assert.IsNotNull(clientPlayer); +// +// int waitFor = Time.frameCount + 2; +// yield return new WaitUntil(() => Time.frameCount >= waitFor); +// +// TestKinematicSetCorrectly(clientPlayer, serverPlayer); +// +// // despawn the server player +// serverPlayer.GetComponent().Despawn(false); +// +// yield return null; +// yield return null; +// +// Assert.IsTrue(clientPlayer == null); // safety check that object is actually despawned. +// } +// +// private void TestKinematicSetCorrectly(GameObject canCommitPlayer, GameObject canNotCommitPlayer) +// { +// +// // can commit player has authority and should have a kinematic mode of false (or true in case body was already kinematic). +// Assert.True(canCommitPlayer.GetComponent().isKinematic == Kinematic); +// +// // can not commit player has no authority and should have a kinematic mode of true +// Assert.True(canNotCommitPlayer.GetComponent().isKinematic); +// } +// } +// } diff --git a/testproject/Assets/Tests/Runtime/Physics/NetworkRigidbodyCntTest.cs.meta b/testproject/Assets/Tests/Runtime/Physics/NetworkRigidbodyCntTest.cs.meta new file mode 100644 index 0000000000..cea97efc01 --- /dev/null +++ b/testproject/Assets/Tests/Runtime/Physics/NetworkRigidbodyCntTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e89712f9406aaa84d85508fa07d97655 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/testproject/Assets/Tests/Runtime/testproject.runtimetests.asmdef b/testproject/Assets/Tests/Runtime/testproject.runtimetests.asmdef index 4325f3c399..5cbf739efa 100644 --- a/testproject/Assets/Tests/Runtime/testproject.runtimetests.asmdef +++ b/testproject/Assets/Tests/Runtime/testproject.runtimetests.asmdef @@ -4,13 +4,26 @@ "references": [ "TestProject.ManualTests", "Unity.Netcode.Runtime", - "Unity.Netcode.RuntimeTests" + "Unity.Netcode.RuntimeTests", + "UnityEngine.TestRunner", + "UnityEditor.TestRunner", + "Unity.Netcode.Components", + "Sample", + "ClientNetworkTransform" ], - "optionalUnityReferences": [ - "TestAssemblies" + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": true, + "precompiledReferences": [ + "nunit.framework.dll" ], + "autoReferenced": false, "defineConstraints": [ "UNITY_INCLUDE_TESTS", - "UNITY_EDITOR" - ] + "UNITY_EDITOR", + "UNITY_INCLUDE_TESTS" + ], + "versionDefines": [], + "noEngineReferences": false } \ No newline at end of file