Description
When a client sends an RPC stamped with LocalTime.Tick, the server ServerTime.Tick in the RPC handler is greater than the sent value. The gap grows with Network Simulator packet delay.
NGO docs suggest LocalTime predicts the server tick when an action is processed. We expected:
server_tick_on_handler <= sent_LocalTime.Tick
After steady-state (30s+), we see the opposite. GetCurrentRtt() reports correctly (~2× packet delay), so this does not look like an RTT reporting or slow-adaptation issue.
Reproduce Steps
- NGO 2.13 + Multiplayer Tools Network Simulator + UTP
- Tick rate 30 Hz, Host + Client
- Add a
NetworkBehaviour that on each client NetworkTickSystem.Tick sends LocalTime.Tick via ServerRpc; server logs received tick + current ServerTime.Tick
- Set Packet Delay to 150ms, wait 30s, collect logs
- Repeat with 300ms delay
Actual Outcome
| Packet Delay |
RTT |
Example (sent → server) |
Gap |
| 150ms |
~320ms |
1190 → 1193 |
+3 ticks |
| 300ms |
~625ms |
1090 → 1098 |
+8 ticks |
Gap scales with delay. ServerTime.Tick + RTT_ticks at send is ~1 tick off; LocalTime.Tick is ~3–8 ticks off.
Expected Outcome
server_tick_on_rpc_handler <= sent_LocalTime.Tick (ideally ≈ equal, ±1 tick). Gap should not grow linearly with delay at steady-state.
Environment
- OS: Windows 11
- Unity: 6000.4.11f1
- NGO: 2.13.0
- UTP: 2.7.2
- Multiplayer Tools: 2.2.9
- Topology: Client-Server, 30 Hz tick rate
Description
When a client sends an RPC stamped with
LocalTime.Tick, the serverServerTime.Tickin the RPC handler is greater than the sent value. The gap grows with Network Simulator packet delay.NGO docs suggest
LocalTimepredicts the server tick when an action is processed. We expected:server_tick_on_handler <= sent_LocalTime.TickAfter steady-state (30s+), we see the opposite.
GetCurrentRtt()reports correctly (~2× packet delay), so this does not look like an RTT reporting or slow-adaptation issue.Reproduce Steps
NetworkBehaviourthat on each clientNetworkTickSystem.TicksendsLocalTime.Tickvia ServerRpc; server logs received tick + currentServerTime.TickActual Outcome
Gap scales with delay.
ServerTime.Tick + RTT_ticksat send is ~1 tick off;LocalTime.Tickis ~3–8 ticks off.Expected Outcome
server_tick_on_rpc_handler <= sent_LocalTime.Tick(ideally ≈ equal, ±1 tick). Gap should not grow linearly with delay at steady-state.Environment