From f249bae81ce9dd3f919a72be3ff4033c0c0b4b90 Mon Sep 17 00:00:00 2001 From: NoelStephensUnity Date: Mon, 17 Mar 2025 12:31:42 -0500 Subject: [PATCH 1/5] test Tracking down time issue. --- .../Tests/Runtime/Timing/TimeInitializationTest.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Timing/TimeInitializationTest.cs b/com.unity.netcode.gameobjects/Tests/Runtime/Timing/TimeInitializationTest.cs index 5d8f39c444..f4c6d165a0 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/Timing/TimeInitializationTest.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/Timing/TimeInitializationTest.cs @@ -42,10 +42,14 @@ public IEnumerator TestClientTimeInitializationOnConnect([Values(0, 1f)] float s yield return new WaitUntil(() => server.NetworkTickSystem.ServerTime.Tick > 2); var serverTimePassed = server.NetworkTickSystem.ServerTime.Time; + var doubleExpectedServerTickCount = (int)System.Math.Floor(serverTimePassed / server.ServerTime.FixedDeltaTimeAsDouble); var expectedServerTickCount = Mathf.FloorToInt((float)(serverTimePassed * 30)); + Debug.Log($"Server Tick: {server.NetworkTickSystem.ServerTime.Tick} Server Time: {server.NetworkTickSystem.ServerTime.Time} ExpDoubTick: {doubleExpectedServerTickCount} ExpTick: {expectedServerTickCount}"); + var ticksPassed = server.NetworkTickSystem.ServerTime.Tick - serverTick; - Assert.AreEqual(expectedServerTickCount, ticksPassed); + Assert.AreEqual(doubleExpectedServerTickCount, ticksPassed, "Double calculated tick count failed."); + Assert.AreEqual(expectedServerTickCount, ticksPassed, "FloorToInt calculated tick count failed."); yield return new WaitForSeconds(clientStartDelay); From 71112dfb685540e4ef64b1d640c57e33d455b3c7 Mon Sep 17 00:00:00 2001 From: NoelStephensUnity Date: Mon, 17 Mar 2025 12:40:37 -0500 Subject: [PATCH 2/5] test - update Adding additional debug information. --- .../Tests/Runtime/Timing/TimeInitializationTest.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Timing/TimeInitializationTest.cs b/com.unity.netcode.gameobjects/Tests/Runtime/Timing/TimeInitializationTest.cs index f4c6d165a0..33c90b16a6 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/Timing/TimeInitializationTest.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/Timing/TimeInitializationTest.cs @@ -45,11 +45,11 @@ public IEnumerator TestClientTimeInitializationOnConnect([Values(0, 1f)] float s var doubleExpectedServerTickCount = (int)System.Math.Floor(serverTimePassed / server.ServerTime.FixedDeltaTimeAsDouble); var expectedServerTickCount = Mathf.FloorToInt((float)(serverTimePassed * 30)); - Debug.Log($"Server Tick: {server.NetworkTickSystem.ServerTime.Tick} Server Time: {server.NetworkTickSystem.ServerTime.Time} ExpDoubTick: {doubleExpectedServerTickCount} ExpTick: {expectedServerTickCount}"); + Debug.Log($"Server Tick: {server.NetworkTickSystem.ServerTime.Tick} Prev-ServerTick: {serverTick} Server Time: {server.NetworkTickSystem.ServerTime.Time} ExpDoubTick: {doubleExpectedServerTickCount} ExpTick: {expectedServerTickCount}"); var ticksPassed = server.NetworkTickSystem.ServerTime.Tick - serverTick; - Assert.AreEqual(doubleExpectedServerTickCount, ticksPassed, "Double calculated tick count failed."); - Assert.AreEqual(expectedServerTickCount, ticksPassed, "FloorToInt calculated tick count failed."); + Assert.AreEqual(doubleExpectedServerTickCount, ticksPassed, $"Double calculated tick count failed: DTick ({doubleExpectedServerTickCount}) TicksPassed ({ticksPassed}) Server Tick ({server.NetworkTickSystem.ServerTime.Tick}) Prev-Server Tick ({serverTick})"); + Assert.AreEqual(expectedServerTickCount, ticksPassed, $"FloorToInt calculated tick count failed: DTick ({expectedServerTickCount}) TicksPassed ({ticksPassed}) Server Tick ({server.NetworkTickSystem.ServerTime.Tick}) Prev-Server Tick ({serverTick})"); yield return new WaitForSeconds(clientStartDelay); From ca9bfcc9799fc8e5d1d9c0190f5d4fc22d00b166 Mon Sep 17 00:00:00 2001 From: NoelStephensUnity Date: Mon, 17 Mar 2025 19:18:46 -0500 Subject: [PATCH 3/5] fix Time calculations using doubles as opposed to floats. --- .../Tests/Runtime/Timing/NetworkTimeSystemTests.cs | 2 +- .../Tests/Runtime/Timing/TimeInitializationTest.cs | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Timing/NetworkTimeSystemTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/Timing/NetworkTimeSystemTests.cs index c38bc86275..a1ea43743e 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/Timing/NetworkTimeSystemTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/Timing/NetworkTimeSystemTests.cs @@ -62,7 +62,7 @@ public IEnumerator PlayerLoopTimeTest_WithDifferentTimeScale([Values(0.0f, 0.1f, public IEnumerator CorrectAmountTicksTest() { NetworkTickSystem tickSystem = NetworkManager.Singleton.NetworkTickSystem; - float delta = tickSystem.LocalTime.FixedDeltaTime; + double delta = tickSystem.LocalTime.FixedDeltaTimeAsDouble; int previous_localTickCalculated = 0; int previous_serverTickCalculated = 0; diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Timing/TimeInitializationTest.cs b/com.unity.netcode.gameobjects/Tests/Runtime/Timing/TimeInitializationTest.cs index 33c90b16a6..e590644522 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/Timing/TimeInitializationTest.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/Timing/TimeInitializationTest.cs @@ -49,7 +49,11 @@ public IEnumerator TestClientTimeInitializationOnConnect([Values(0, 1f)] float s var ticksPassed = server.NetworkTickSystem.ServerTime.Tick - serverTick; Assert.AreEqual(doubleExpectedServerTickCount, ticksPassed, $"Double calculated tick count failed: DTick ({doubleExpectedServerTickCount}) TicksPassed ({ticksPassed}) Server Tick ({server.NetworkTickSystem.ServerTime.Tick}) Prev-Server Tick ({serverTick})"); - Assert.AreEqual(expectedServerTickCount, ticksPassed, $"FloorToInt calculated tick count failed: DTick ({expectedServerTickCount}) TicksPassed ({ticksPassed}) Server Tick ({server.NetworkTickSystem.ServerTime.Tick}) Prev-Server Tick ({serverTick})"); + if (expectedServerTickCount != ticksPassed) + { + Debug.Log($"FloorToInt calculated tick count failed: DTick ({expectedServerTickCount}) TicksPassed ({ticksPassed}) Server Tick ({server.NetworkTickSystem.ServerTime.Tick}) Prev-Server Tick ({serverTick})"); + } + //Assert.AreEqual(expectedServerTickCount, ticksPassed, $"FloorToInt calculated tick count failed: DTick ({expectedServerTickCount}) TicksPassed ({ticksPassed}) Server Tick ({server.NetworkTickSystem.ServerTime.Tick}) Prev-Server Tick ({serverTick})"); yield return new WaitForSeconds(clientStartDelay); From ce775d019e10f89217d87291d573622e9707a800 Mon Sep 17 00:00:00 2001 From: NoelStephensUnity Date: Mon, 17 Mar 2025 23:36:47 -0500 Subject: [PATCH 4/5] test - update Cleaning up TimeInitializationTest a bit. --- .../Tests/Runtime/Timing/TimeInitializationTest.cs | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Timing/TimeInitializationTest.cs b/com.unity.netcode.gameobjects/Tests/Runtime/Timing/TimeInitializationTest.cs index e590644522..dc06c2877d 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/Timing/TimeInitializationTest.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/Timing/TimeInitializationTest.cs @@ -42,18 +42,11 @@ public IEnumerator TestClientTimeInitializationOnConnect([Values(0, 1f)] float s yield return new WaitUntil(() => server.NetworkTickSystem.ServerTime.Tick > 2); var serverTimePassed = server.NetworkTickSystem.ServerTime.Time; - var doubleExpectedServerTickCount = (int)System.Math.Floor(serverTimePassed / server.ServerTime.FixedDeltaTimeAsDouble); - var expectedServerTickCount = Mathf.FloorToInt((float)(serverTimePassed * 30)); - - Debug.Log($"Server Tick: {server.NetworkTickSystem.ServerTime.Tick} Prev-ServerTick: {serverTick} Server Time: {server.NetworkTickSystem.ServerTime.Time} ExpDoubTick: {doubleExpectedServerTickCount} ExpTick: {expectedServerTickCount}"); + // Use FixedDeltaTimeAsDouble and divide the tick frequency into the time passed to get the accurate tick count + var expectedServerTickCount = (int)System.Math.Floor(serverTimePassed / server.ServerTime.FixedDeltaTimeAsDouble); var ticksPassed = server.NetworkTickSystem.ServerTime.Tick - serverTick; - Assert.AreEqual(doubleExpectedServerTickCount, ticksPassed, $"Double calculated tick count failed: DTick ({doubleExpectedServerTickCount}) TicksPassed ({ticksPassed}) Server Tick ({server.NetworkTickSystem.ServerTime.Tick}) Prev-Server Tick ({serverTick})"); - if (expectedServerTickCount != ticksPassed) - { - Debug.Log($"FloorToInt calculated tick count failed: DTick ({expectedServerTickCount}) TicksPassed ({ticksPassed}) Server Tick ({server.NetworkTickSystem.ServerTime.Tick}) Prev-Server Tick ({serverTick})"); - } - //Assert.AreEqual(expectedServerTickCount, ticksPassed, $"FloorToInt calculated tick count failed: DTick ({expectedServerTickCount}) TicksPassed ({ticksPassed}) Server Tick ({server.NetworkTickSystem.ServerTime.Tick}) Prev-Server Tick ({serverTick})"); + Assert.AreEqual(expectedServerTickCount, ticksPassed, $"Calculated tick failed: Tick ({expectedServerTickCount}) TicksPassed ({ticksPassed}) Server Tick ({server.NetworkTickSystem.ServerTime.Tick}) Prev-Server Tick ({serverTick})"); yield return new WaitForSeconds(clientStartDelay); From 8d986a9ff3de6dd3c44b4975b037ce9b85a70ca4 Mon Sep 17 00:00:00 2001 From: NoelStephensUnity Date: Mon, 17 Mar 2025 23:37:21 -0500 Subject: [PATCH 5/5] test - update Removing extra CR. --- .../Tests/Runtime/Timing/NetworkTimeSystemTests.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Timing/NetworkTimeSystemTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/Timing/NetworkTimeSystemTests.cs index a1ea43743e..7172feb302 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/Timing/NetworkTimeSystemTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/Timing/NetworkTimeSystemTests.cs @@ -79,7 +79,6 @@ public IEnumerator CorrectAmountTicksTest() previous_localTickCalculated++; } - tickCalculated = NetworkManager.Singleton.ServerTime.Time / delta; previous_serverTickCalculated = (int)tickCalculated;