@@ -1619,7 +1619,7 @@ internal bool SynchronizeScale
16191619 public bool CanCommitToTransform { get ; protected set ; }
16201620
16211621 /// <summary>
1622- /// Internally used by <see cref="NetworkTransform"/> to keep track of the <see cref="NetworkManager"/> instance assigned to this
1622+ /// Internally used by <see cref="NetworkTransform"/> to keep track of the <see cref="NetworkManager"/> instance assigned to
16231623 /// this <see cref="NetworkBehaviour"/> derived class instance.
16241624 /// </summary>
16251625 protected NetworkManager m_CachedNetworkManager ;
@@ -1850,6 +1850,7 @@ private bool ShouldSynchronizeHalfFloat(ulong targetClientId)
18501850 if ( ! IsServerAuthoritative ( ) && NetworkObject . OwnerClientId == targetClientId )
18511851 {
18521852 // In distributed authority mode we want to synchronize the half float if we are the owner.
1853+ // TODO do we have a cached NetworkManager here? Should we create one?
18531854 return ( ! NetworkManager . DistributedAuthorityMode && NetworkObject . IsOwnedByServer ) || ( NetworkManager . DistributedAuthorityMode ) ;
18541855 }
18551856 return true ;
@@ -2092,12 +2093,14 @@ internal bool ApplyTransformToNetworkState(ref NetworkTransformState networkStat
20922093 return CheckForStateChange ( ref networkState ) ;
20932094 }
20942095
2096+ //private int m_CachedTickRateValue;
20952097 /// <summary>
20962098 /// Applies the transform to the <see cref="NetworkTransformState"/> specified.
20972099 /// </summary>
20982100 [ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
20992101 private bool CheckForStateChange ( ref NetworkTransformState networkState , bool isSynchronization = false , ulong targetClientId = 0 , bool forceState = false )
21002102 {
2103+ var cachedTickRateValue = ( int ) m_CachedNetworkManager . NetworkConfig . TickRate ;
21012104 var flagStates = networkState . FlagStates ;
21022105
21032106 // As long as we are not doing our first synchronization and we are sending unreliable deltas, each
@@ -2112,9 +2115,8 @@ private bool CheckForStateChange(ref NetworkTransformState networkState, bool is
21122115 // We compare against the NetworkTickSystem version since ServerTime is set when updating ticks
21132116 if ( UseUnreliableDeltas && ! isSynchronization && m_DeltaSynch && m_NextTickSync <= CurrentTick )
21142117 {
2115- // TODO-CACHE: m_CachedNetworkManager.NetworkConfig.TickRate value
21162118 // Increment to the next frame synch tick position for this instance
2117- m_NextTickSync += ( int ) m_CachedNetworkManager . NetworkConfig . TickRate ;
2119+ m_NextTickSync += cachedTickRateValue ;
21182120 // If we are teleporting, we do not need to send a frame synch for this tick slot
21192121 // as a "frame synch" really is effectively just a teleport.
21202122 isAxisSync = ! flagStates . IsTeleportingNextFrame ;
@@ -3297,7 +3299,7 @@ private void OnNetworkStateChanged(NetworkTransformState oldState, NetworkTransf
32973299 }
32983300
32993301 // Get the time when this new state was sent
3300- newState . SentTime = new NetworkTime ( m_CachedNetworkManager . NetworkTickSystem . TickRate , newState . NetworkTick ) . Time ;
3302+ newState . SentTime = new NetworkTime ( m_CachedNetworkTickRate , newState . NetworkTick ) . Time ;
33013303
33023304 if ( LogStateUpdate )
33033305 {
@@ -3526,7 +3528,7 @@ protected internal override void InternalOnNetworkPostSpawn()
35263528 // Then we want to:
35273529 // - Force the "IsSynchronizing" flag so the NetworkTransform has its state updated properly and runs through the initialization again.
35283530 // - Make sure the SynchronizingState is updated to the instantiated prefab's default flags/settings.
3529- if ( NetworkManager . IsServer && ! NetworkManager . DistributedAuthorityMode && ! IsOwner && ! OnIsServerAuthoritative ( ) && ! SynchronizeState . IsSynchronizing )
3531+ if ( m_CachedNetworkManager . IsServer && ! m_CachedNetworkManager . DistributedAuthorityMode && ! IsOwner && ! OnIsServerAuthoritative ( ) && ! SynchronizeState . IsSynchronizing )
35303532 {
35313533 // Handle the first/root NetworkTransform slightly differently to have a sequenced synchronization of like authority nested NetworkTransform components
35323534 if ( m_IsFirstNetworkTransform )
@@ -3569,6 +3571,7 @@ protected internal override void InternalOnNetworkPostSpawn()
35693571 internal static InterpolationTypes DefaultInterpolationType ;
35703572
35713573 internal Transform CachedTransform ;
3574+ private uint m_CachedNetworkTickRate ;
35723575
35733576 /// <summary>
35743577 /// Create interpolators when first instantiated to avoid memory allocations if the
@@ -3599,6 +3602,7 @@ protected virtual void Awake()
35993602 internal override void InternalOnNetworkPreSpawn ( ref NetworkManager networkManager )
36003603 {
36013604 m_CachedNetworkManager = networkManager ;
3605+ m_CachedNetworkTickRate = m_CachedNetworkManager . NetworkTickSystem . TickRate ;
36023606 CachedTransform = transform ;
36033607 base . InternalOnNetworkPreSpawn ( ref networkManager ) ;
36043608 }
@@ -3607,7 +3611,6 @@ internal override void InternalOnNetworkPreSpawn(ref NetworkManager networkManag
36073611 public override void OnNetworkSpawn ( )
36083612 {
36093613 m_ParentedChildren . Clear ( ) ;
3610- m_CachedNetworkManager = NetworkManager ;
36113614
36123615 Initialize ( ) ;
36133616
@@ -3736,9 +3739,9 @@ private void InternalInitialization(bool isOwnershipChange = false)
37363739 var currentPosition = GetSpaceRelativePosition ( ) ;
37373740 var currentRotation = GetSpaceRelativeRotation ( ) ;
37383741
3739- if ( NetworkManager . DistributedAuthorityMode )
3742+ if ( m_CachedNetworkManager . DistributedAuthorityMode )
37403743 {
3741- RegisterNetworkManagerForTickUpdate ( NetworkManager ) ;
3744+ RegisterNetworkManagerForTickUpdate ( m_CachedNetworkManager ) ;
37423745 }
37433746
37443747#if COM_UNITY_MODULES_PHYSICS || COM_UNITY_MODULES_PHYSICS2D
@@ -4577,7 +4580,7 @@ internal void TransformStateUpdate()
45774580 {
45784581 // TODO: Investigate where this state should be applied or just discarded.
45794582 // For now, discard the state if we assumed ownership.
4580- // Debug.Log($"[Client-{NetworkManager .LocalClientId}] Ignoring inbound update from Client-{0} and parentUpdated:{isParentingDirective}!");
4583+ // Debug.Log($"[Client-{m_CachedNetworkManager .LocalClientId}] Ignoring inbound update from Client-{0} and parentUpdated:{isParentingDirective}!");
45814584 return ;
45824585 }
45834586 // Store the previous/old state
@@ -4690,6 +4693,7 @@ internal static float GetTickLatency(NetworkManager networkManager)
46904693 /// Only valid on clients.
46914694 /// </remarks>
46924695 /// <returns>Returns the tick latency and local offset in seconds and as a float value.</returns>
4696+ /// Can this be called before spawn?
46934697 public static float GetTickLatency ( )
46944698 {
46954699 return GetTickLatency ( NetworkManager . Singleton ) ;
@@ -4802,14 +4806,14 @@ private static void RegisterNetworkManagerForTickUpdate(NetworkManager networkMa
48024806 /// <param name="networkTransform"></param>
48034807 private static void RegisterForTickUpdate ( NetworkTransform networkTransform )
48044808 {
4805-
4806- if ( ! networkTransform . NetworkManager . DistributedAuthorityMode && ! s_NetworkTickRegistration . ContainsKey ( networkTransform . NetworkManager ) )
4809+ var networkManager = networkTransform . NetworkManager ;
4810+ if ( ! networkManager . DistributedAuthorityMode && ! s_NetworkTickRegistration . ContainsKey ( networkManager ) )
48074811 {
4808- s_NetworkTickRegistration . Add ( networkTransform . NetworkManager , new NetworkTransformTickRegistration ( networkTransform . NetworkManager ) ) ;
4812+ s_NetworkTickRegistration . Add ( networkManager , new NetworkTransformTickRegistration ( networkManager ) ) ;
48094813 }
48104814
48114815 networkTransform . RegisterForTickSynchronization ( ) ;
4812- s_NetworkTickRegistration [ networkTransform . NetworkManager ] . NetworkTransforms . Add ( networkTransform ) ;
4816+ s_NetworkTickRegistration [ networkManager ] . NetworkTransforms . Add ( networkTransform ) ;
48134817 }
48144818
48154819 /// <summary>
@@ -4819,16 +4823,17 @@ private static void RegisterForTickUpdate(NetworkTransform networkTransform)
48194823 /// <param name="networkTransform"></param>
48204824 private static void DeregisterForTickUpdate ( NetworkTransform networkTransform )
48214825 {
4822- if ( networkTransform . NetworkManager == null )
4826+ var networkManager = networkTransform . NetworkManager ;
4827+ if ( ! networkManager )
48234828 {
48244829 return ;
48254830 }
4826- if ( s_NetworkTickRegistration . ContainsKey ( networkTransform . NetworkManager ) )
4831+ if ( s_NetworkTickRegistration . ContainsKey ( networkManager ) )
48274832 {
4828- s_NetworkTickRegistration [ networkTransform . NetworkManager ] . NetworkTransforms . Remove ( networkTransform ) ;
4829- if ( ! networkTransform . NetworkManager . DistributedAuthorityMode && s_NetworkTickRegistration [ networkTransform . NetworkManager ] . NetworkTransforms . Count == 0 )
4833+ s_NetworkTickRegistration [ networkManager ] . NetworkTransforms . Remove ( networkTransform ) ;
4834+ if ( ! networkManager . DistributedAuthorityMode && s_NetworkTickRegistration [ networkManager ] . NetworkTransforms . Count == 0 )
48304835 {
4831- var registrationEntry = s_NetworkTickRegistration [ networkTransform . NetworkManager ] ;
4836+ var registrationEntry = s_NetworkTickRegistration [ networkManager ] ;
48324837 registrationEntry . Remove ( ) ;
48334838 }
48344839 }
0 commit comments