From ac013c2e9e785d2280cc1389b619fc8e04524079 Mon Sep 17 00:00:00 2001 From: NoelStephensUnity Date: Mon, 31 Mar 2025 16:59:56 -0500 Subject: [PATCH 1/2] update Adding NetworkTime.FixedDeltaTimeAsDouble property to provide a double version of the NetworkTime.FixedDeltaTime. --- com.unity.netcode.gameobjects/Runtime/Timing/NetworkTime.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/com.unity.netcode.gameobjects/Runtime/Timing/NetworkTime.cs b/com.unity.netcode.gameobjects/Runtime/Timing/NetworkTime.cs index 916a35e6c4..b66ad3ef21 100644 --- a/com.unity.netcode.gameobjects/Runtime/Timing/NetworkTime.cs +++ b/com.unity.netcode.gameobjects/Runtime/Timing/NetworkTime.cs @@ -50,6 +50,11 @@ public struct NetworkTime /// public float FixedDeltaTime => (float)m_TickInterval; + /// + /// Gets the fixed delta time as a double. This value is calculated by dividing 1.0 by the and stays constant. + /// + public double FixedDeltaTimeAsDouble => m_TickInterval; + /// /// Gets the amount of network ticks which have passed until reaching the current time value. /// From c79336914c9ce496cdc1a36c144e8d1604b534f1 Mon Sep 17 00:00:00 2001 From: NoelStephensUnity Date: Mon, 31 Mar 2025 17:01:28 -0500 Subject: [PATCH 2/2] test Updating the `NetworkTimeSystemTests.CorrectAmountTicksTest` to use the `NetworkTime.FixedDeltaTimeAsDouble` as opposed to the `NetworkTime.FixedDeltaTime`. Adding additional debug information in the event it fails in the future we will have more information. --- .../Runtime/Timing/NetworkTimeSystemTests.cs | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Timing/NetworkTimeSystemTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/Timing/NetworkTimeSystemTests.cs index 992dbb2293..627fe8776a 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; @@ -70,27 +70,26 @@ public IEnumerator CorrectAmountTicksTest() { yield return null; - var tickCalculated = tickSystem.LocalTime.Time / delta; - previous_localTickCalculated = (int)tickCalculated; + var localTickCalculated = tickSystem.LocalTime.Time / delta; + previous_localTickCalculated = (int)localTickCalculated; // This check is needed due to double division imprecision of large numbers - if ((tickCalculated - previous_localTickCalculated) >= 0.999999999999) + if ((localTickCalculated - previous_localTickCalculated) >= 0.999999999999) { previous_localTickCalculated++; } - - tickCalculated = NetworkManager.Singleton.ServerTime.Time / delta; - previous_serverTickCalculated = (int)tickCalculated; + var serverTickCalculated = tickSystem.ServerTime.Time / delta; + previous_serverTickCalculated = (int)serverTickCalculated; // This check is needed due to double division imprecision of large numbers - if ((tickCalculated - previous_serverTickCalculated) >= 0.999999999999) + if ((serverTickCalculated - previous_serverTickCalculated) >= 0.999999999999) { previous_serverTickCalculated++; } - Assert.AreEqual(previous_localTickCalculated, NetworkManager.Singleton.LocalTime.Tick, $"Calculated local tick {previous_localTickCalculated} does not match local tick {NetworkManager.Singleton.LocalTime.Tick}!"); - Assert.AreEqual(previous_serverTickCalculated, NetworkManager.Singleton.ServerTime.Tick, $"Calculated server tick {previous_serverTickCalculated} does not match server tick {NetworkManager.Singleton.ServerTime.Tick}!"); + Assert.AreEqual(previous_localTickCalculated, NetworkManager.Singleton.LocalTime.Tick, $"Calculated local tick {previous_localTickCalculated} does not match local tick {NetworkManager.Singleton.LocalTime.Tick}!]n Local Tick-Calc: {localTickCalculated} LocalTime: {tickSystem.LocalTime.Time} | Server Tick-Calc: {serverTickCalculated} ServerTime: {tickSystem.ServerTime.Time} | TickDelta: {delta}"); + Assert.AreEqual(previous_serverTickCalculated, NetworkManager.Singleton.ServerTime.Tick, $"Calculated server tick {previous_serverTickCalculated} does not match server tick {NetworkManager.Singleton.ServerTime.Tick}!\n Local Tick-Calc: {localTickCalculated} LocalTime: {tickSystem.LocalTime.Time} | Server Tick-Calc: {serverTickCalculated} ServerTime: {tickSystem.ServerTime.Time} | TickDelta: {delta}"); Assert.AreEqual((float)NetworkManager.Singleton.LocalTime.Time, (float)NetworkManager.Singleton.ServerTime.Time, $"Local time {(float)NetworkManager.Singleton.LocalTime.Time} is not approximately server time {(float)NetworkManager.Singleton.ServerTime.Time}!", FloatComparer.s_ComparerWithDefaultTolerance); } }