@@ -935,6 +935,12 @@ public void NetworkSerialize<T>(BufferSerializer<T> serializer) where T : IReade
935935
936936 #region PROPERTIES AND GENERAL METHODS
937937
938+ /// <summary>
939+ /// Used on the authority side only.
940+ /// This is the current network tick and is set within <see cref="NetworkManager.NetworkUpdate(NetworkUpdateStage)"/>.
941+ /// </summary>
942+ internal static int CurrentTick ;
943+
938944 /// <summary>
939945 /// Pertains to Owner Authority and Interpolation<br />
940946 /// When enabled (default), 1 additional tick is added to the total number of ticks used to calculate the tick latency ("ticks ago") as a time.
@@ -1878,6 +1884,8 @@ private void TryCommitTransform(ref Transform transformToCommit, bool synchroniz
18781884 // If the state was explicitly set, then update the network tick to match the locally calculate tick
18791885 if ( m_LocalAuthoritativeNetworkState . ExplicitSet )
18801886 {
1887+ // For explicit set, we use the current ServerTime.Tick and not CurrentTick since this is a SetState specific flow
1888+ // that is outside of the normal internal tick flow.
18811889 m_LocalAuthoritativeNetworkState . NetworkTick = m_CachedNetworkManager . NetworkTickSystem . ServerTime . Tick ;
18821890 }
18831891
@@ -2011,7 +2019,7 @@ private bool CheckForStateChange(ref NetworkTransformState networkState, ref Tra
20112019 // send a full frame synch.
20122020 var isAxisSync = false ;
20132021 // We compare against the NetworkTickSystem version since ServerTime is set when updating ticks
2014- if ( UseUnreliableDeltas && ! isSynchronization && m_DeltaSynch && m_NextTickSync <= m_CachedNetworkManager . NetworkTickSystem . ServerTime . Tick )
2022+ if ( UseUnreliableDeltas && ! isSynchronization && m_DeltaSynch && m_NextTickSync <= CurrentTick )
20152023 {
20162024 // Increment to the next frame synch tick position for this instance
20172025 m_NextTickSync += ( int ) m_CachedNetworkManager . NetworkConfig . TickRate ;
@@ -2179,7 +2187,7 @@ private bool CheckForStateChange(ref NetworkTransformState networkState, ref Tra
21792187 {
21802188 // If we are teleporting then we can skip the delta threshold check
21812189 isPositionDirty = networkState . IsTeleportingNextFrame || isAxisSync || forceState ;
2182- if ( m_HalfFloatTargetTickOwnership > m_CachedNetworkManager . ServerTime . Tick )
2190+ if ( m_HalfFloatTargetTickOwnership > CurrentTick )
21832191 {
21842192 isPositionDirty = true ;
21852193 }
@@ -2225,7 +2233,7 @@ private bool CheckForStateChange(ref NetworkTransformState networkState, ref Tra
22252233 networkState . NetworkDeltaPosition = m_HalfPositionState ;
22262234
22272235 // If ownership offset is greater or we are doing an axial synchronization then synchronize the base position
2228- if ( ( m_HalfFloatTargetTickOwnership > m_CachedNetworkManager . ServerTime . Tick || isAxisSync ) && ! networkState . IsTeleportingNextFrame )
2236+ if ( ( m_HalfFloatTargetTickOwnership > CurrentTick || isAxisSync ) && ! networkState . IsTeleportingNextFrame )
22292237 {
22302238 networkState . SynchronizeBaseHalfFloat = true ;
22312239 }
@@ -2409,7 +2417,7 @@ private bool CheckForStateChange(ref NetworkTransformState networkState, ref Tra
24092417 if ( enabled )
24102418 {
24112419 // We use the NetworkTickSystem version since ServerTime is set when updating ticks
2412- networkState . NetworkTick = m_CachedNetworkManager . NetworkTickSystem . ServerTime . Tick ;
2420+ networkState . NetworkTick = CurrentTick ;
24132421 }
24142422 }
24152423
@@ -2440,7 +2448,7 @@ private void OnNetworkTick(bool isCalledFromParent = false)
24402448 }
24412449
24422450 // If we are nested and have already sent a state update this tick, then exit early (otherwise check for any changes in state)
2443- if ( IsNested && m_LocalAuthoritativeNetworkState . NetworkTick == m_CachedNetworkManager . ServerTime . Tick )
2451+ if ( IsNested && m_LocalAuthoritativeNetworkState . NetworkTick == CurrentTick )
24442452 {
24452453 return ;
24462454 }
@@ -4500,6 +4508,15 @@ private void UpdateTransformState()
45004508
45014509 #region NETWORK TICK REGISTRATOIN AND HANDLING
45024510 private static Dictionary < NetworkManager , NetworkTransformTickRegistration > s_NetworkTickRegistration = new Dictionary < NetworkManager , NetworkTransformTickRegistration > ( ) ;
4511+
4512+ internal static void UpdateNetworkTick ( NetworkManager networkManager )
4513+ {
4514+ if ( s_NetworkTickRegistration . ContainsKey ( networkManager ) )
4515+ {
4516+ s_NetworkTickRegistration [ networkManager ] . TickUpdate ( ) ;
4517+ }
4518+ }
4519+
45034520 /// <summary>
45044521 /// Adjusts the over-all tick offset (i.e. how many ticks ago) and how wide of a maximum delta time will be used for the
45054522 /// various <see cref="InterpolationTypes"/>.
@@ -4561,9 +4578,8 @@ private static void RemoveTickUpdate(NetworkManager networkManager)
45614578 /// Having the tick update once and cycling through registered instances to update is evidently less processor
45624579 /// intensive than having each instance subscribe and update individually.
45634580 /// </summary>
4564- private class NetworkTransformTickRegistration
4581+ internal class NetworkTransformTickRegistration
45654582 {
4566- private Action m_NetworkTickUpdate ;
45674583 private NetworkManager m_NetworkManager ;
45684584 public HashSet < NetworkTransform > NetworkTransforms = new HashSet < NetworkTransform > ( ) ;
45694585
@@ -4575,8 +4591,6 @@ private void OnNetworkManagerStopped(bool value)
45754591
45764592 public void Remove ( )
45774593 {
4578- m_NetworkManager . NetworkTickSystem . Tick -= m_NetworkTickUpdate ;
4579- m_NetworkTickUpdate = null ;
45804594 NetworkTransforms . Clear ( ) ;
45814595 RemoveTickUpdate ( m_NetworkManager ) ;
45824596 }
@@ -4585,10 +4599,10 @@ public void Remove()
45854599 /// Invoked once per network tick, this will update any registered
45864600 /// authority instances.
45874601 /// </summary>
4588- private void TickUpdate ( )
4602+ internal void TickUpdate ( )
45894603 {
45904604 // TODO FIX: The local NetworkTickSystem can invoke with the same network tick as before
4591- if ( m_NetworkManager . ServerTime . Tick <= m_LastTick )
4605+ if ( CurrentTick <= m_LastTick )
45924606 {
45934607 return ;
45944608 }
@@ -4599,13 +4613,11 @@ private void TickUpdate()
45994613 networkTransform . OnNetworkTick ( ) ;
46004614 }
46014615 }
4602- m_LastTick = m_NetworkManager . ServerTime . Tick ;
4616+ m_LastTick = CurrentTick ;
46034617 }
46044618 public NetworkTransformTickRegistration ( NetworkManager networkManager )
46054619 {
46064620 m_NetworkManager = networkManager ;
4607- m_NetworkTickUpdate = new Action ( TickUpdate ) ;
4608- networkManager . NetworkTickSystem . Tick += m_NetworkTickUpdate ;
46094621 if ( networkManager . IsServer )
46104622 {
46114623 networkManager . OnServerStopped += OnNetworkManagerStopped ;
0 commit comments