@@ -28,6 +28,8 @@ public class PingTool : NetworkBehaviour
2828 public bool StartWithNetStateMonitorHidden = true ;
2929 public KeyCode NetStatsMonitorToggle = KeyCode . Tab ;
3030#endif
31+ public Text PingRateValue ;
32+ public Text PingToolHelp ;
3133 public bool EnableConsoleLogging = true ;
3234
3335 public UnityEvent < ulong , ClientRtt > LogMessage ;
@@ -65,7 +67,7 @@ public void Reset()
6567 private Dictionary < ulong , float > m_NextClientPingTime = new Dictionary < ulong , float > ( ) ;
6668 private Dictionary < ulong , Coroutine > m_ClientUpdateRoutines = new Dictionary < ulong , Coroutine > ( ) ;
6769 private Slider m_Slider ;
68- private Text m_PingRateValue ;
70+
6971 private Canvas m_PingUICanvas ;
7072 private bool m_PingRateUpdated ;
7173 private float m_LastUpdatedTime ;
@@ -93,7 +95,6 @@ public ClientRtt GetClientRtt(ulong clientID)
9395 private void Awake ( )
9496 {
9597 m_Slider = GetComponentInChildren < Slider > ( ) ;
96- m_PingRateValue = GetComponentInChildren < Text > ( ) ;
9798 m_PingUICanvas = GetComponentInChildren < Canvas > ( ) ;
9899 m_PingUICanvas . gameObject . SetActive ( false ) ;
99100#if MULTIPLAYER_TOOLS
@@ -102,6 +103,11 @@ private void Awake()
102103 m_NetStatsMonitor . Visible = false ;
103104 }
104105#endif
106+
107+ if ( PingToolHelp )
108+ {
109+ PingToolHelp . text = PingToolHelp . text . Replace ( "<>" , $ "<{ NetStatsMonitorToggle } >") ;
110+ }
105111 }
106112
107113 protected override void OnNetworkPreSpawn ( ref NetworkManager networkManager )
@@ -156,11 +162,19 @@ public override void OnNetworkSpawn()
156162 InitializeAllClients ( ) ;
157163 NetworkManager . OnConnectionEvent += OnConnectionEvent ;
158164 }
165+ UpdatePingRateValue ( m_PingRate . Value ) ;
159166
160- m_PingRateValue . text = $ "{ m_PingRate . Value } ";
161167 base . OnNetworkSpawn ( ) ;
162168 }
163169
170+ private void UpdatePingRateValue ( int value )
171+ {
172+ if ( PingRateValue )
173+ {
174+ PingRateValue . text = $ "{ m_PingRate . Value } ";
175+ }
176+ }
177+
164178 protected override void OnOwnershipChanged ( ulong previous , ulong current )
165179 {
166180 if ( current == NetworkManager . LocalClientId )
@@ -182,7 +196,7 @@ protected override void OnOwnershipChanged(ulong previous, ulong current)
182196 private void OnPingRateChanged ( int previous , int current )
183197 {
184198 InitializePingClientTime ( OwnerClientId ) ;
185- m_PingRateValue . text = $ " { current } " ;
199+ UpdatePingRateValue ( current ) ;
186200 }
187201
188202 public override void OnNetworkDespawn ( )
@@ -290,7 +304,7 @@ private void OnPingRateChanged()
290304 if ( m_Slider . value != PingRate )
291305 {
292306 PingRate = ( int ) m_Slider . value ;
293- m_PingRateValue . text = $ " { PingRate } " ;
307+ UpdatePingRateValue ( PingRate ) ;
294308 // Flag the last time this value updated for the OwnerMonitorPingRateChange coroutine
295309 m_LastUpdatedTime = Time . realtimeSinceStartup ;
296310 m_PingRateUpdated = true ;
@@ -377,6 +391,10 @@ private void Update()
377391 if ( m_NetStatsMonitor && Input . GetKeyDown ( NetStatsMonitorToggle ) )
378392 {
379393 m_NetStatsMonitor . Visible = ! m_NetStatsMonitor . Visible ;
394+ if ( PingToolHelp )
395+ {
396+ PingToolHelp . gameObject . SetActive ( ! m_NetStatsMonitor . Visible ) ;
397+ }
380398 }
381399 }
382400 }
@@ -422,12 +440,24 @@ private void InitializeClient(ulong clientId, bool hasEntry)
422440 [ Rpc ( SendTo . SpecifiedInParams ) ]
423441 private void PingRpc ( float timeSent , RpcParams rpcParams )
424442 {
443+ // Exit early if despawning or shutdown
444+ if ( ! IsSpawned || NetworkManager == null || ! NetworkManager . IsListening || NetworkManager . ShutdownInProgress )
445+ {
446+ return ;
447+ }
448+
425449 PongRpc ( Mathf . Abs ( NetworkManager . ServerTime . TimeAsFloat - timeSent ) , RpcTarget . Single ( rpcParams . Receive . SenderClientId , RpcTargetUse . Temp ) ) ;
426450 }
427451
428452 [ Rpc ( SendTo . SpecifiedInParams ) ]
429453 private void PongRpc ( float timeDelta , RpcParams rpcParams )
430454 {
455+ // Exit early if despawning or shutdown
456+ if ( ! IsSpawned || NetworkManager == null || ! NetworkManager . IsListening || NetworkManager . ShutdownInProgress )
457+ {
458+ return ;
459+ }
460+
431461 UpdateClientRTT ( rpcParams . Receive . SenderClientId , timeDelta ) ;
432462 }
433463
@@ -448,7 +478,7 @@ private void UpdateClientRTT(ulong clientId, float timeDelta)
448478 }
449479
450480 var pingEntry = m_ClientPingQueue [ clientId ] ;
451- var ping = timeDelta - ( latencyToTimeServer * 0.001f ) ;
481+ var ping = Mathf . Abs ( timeDelta - ( latencyToTimeServer * 0.001f ) ) ;
452482 pingEntry . PingTime += ping ;
453483 pingEntry . UTP_RTT += currentRTT ;
454484 pingEntry . ReceivedPongs ++ ;
0 commit comments