Skip to content

Commit 0775e8b

Browse files
committed
Reset NetworkTransform
1 parent 4e48d49 commit 0775e8b

File tree

1 file changed

+34
-36
lines changed

1 file changed

+34
-36
lines changed

com.unity.netcode.gameobjects/Runtime/Components/NetworkTransform.cs

Lines changed: 34 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1621,7 +1621,7 @@ internal bool SynchronizeScale
16211621
public bool CanCommitToTransform { get; protected set; }
16221622

16231623
/// <summary>
1624-
/// Internally used by <see cref="NetworkTransform"/> to keep track of the <see cref="NetworkManager"/> instance assigned to
1624+
/// Internally used by <see cref="NetworkTransform"/> to keep track of the <see cref="NetworkManager"/> instance assigned to this
16251625
/// this <see cref="NetworkBehaviour"/> derived class instance.
16261626
/// </summary>
16271627
protected NetworkManager m_CachedNetworkManager;
@@ -1847,12 +1847,12 @@ internal void UpdatePositionSlerp()
18471847
/// is the owner being synchronized we don't want to synchronize with
18481848
/// the exception of the NetworkObject being owned by the server.
18491849
/// </summary>
1850-
private bool ShouldSynchronizeHalfFloat(NetworkManager networkManager, ulong targetClientId)
1850+
private bool ShouldSynchronizeHalfFloat(ulong targetClientId)
18511851
{
18521852
if (!IsServerAuthoritative() && NetworkObject.OwnerClientId == targetClientId)
18531853
{
18541854
// In distributed authority mode we want to synchronize the half float if we are the owner.
1855-
return (!networkManager.DistributedAuthorityMode && NetworkObject.IsOwnedByServer) || (networkManager.DistributedAuthorityMode);
1855+
return (!NetworkManager.DistributedAuthorityMode && NetworkObject.IsOwnedByServer) || (NetworkManager.DistributedAuthorityMode);
18561856
}
18571857
return true;
18581858
}
@@ -2122,7 +2122,6 @@ internal bool ApplyTransformToNetworkState(ref NetworkTransformState networkStat
21222122
[MethodImpl(MethodImplOptions.AggressiveInlining)]
21232123
private bool CheckForStateChange(ref NetworkTransformState networkState, bool isSynchronization = false, ulong targetClientId = 0, bool forceState = false)
21242124
{
2125-
var cachedTickRateValue = (int)m_CachedNetworkManager.NetworkConfig.TickRate;
21262125
var flagStates = networkState.FlagStates;
21272126

21282127
// As long as we are not doing our first synchronization and we are sending unreliable deltas, each
@@ -2137,8 +2136,9 @@ private bool CheckForStateChange(ref NetworkTransformState networkState, bool is
21372136
// We compare against the NetworkTickSystem version since ServerTime is set when updating ticks
21382137
if (UseUnreliableDeltas && !isSynchronization && m_DeltaSynch && m_NextTickSync <= CurrentTick)
21392138
{
2139+
// TODO-CACHE: m_CachedNetworkManager.NetworkConfig.TickRate value
21402140
// Increment to the next frame synch tick position for this instance
2141-
m_NextTickSync += cachedTickRateValue;
2141+
m_NextTickSync += (int)m_CachedNetworkManager.NetworkConfig.TickRate;
21422142
// If we are teleporting, we do not need to send a frame synch for this tick slot
21432143
// as a "frame synch" really is effectively just a teleport.
21442144
isAxisSync = !flagStates.IsTeleportingNextFrame;
@@ -2374,7 +2374,7 @@ private bool CheckForStateChange(ref NetworkTransformState networkState, bool is
23742374
}
23752375
else // If synchronizing is set, then use the current full position value on the server side
23762376
{
2377-
if (ShouldSynchronizeHalfFloat(m_CachedNetworkManager, targetClientId))
2377+
if (ShouldSynchronizeHalfFloat(targetClientId))
23782378
{
23792379
// If we have a NetworkDeltaPosition that has a state applied, then we want to determine
23802380
// what needs to be synchronized. For owner authoritative mode, the server side
@@ -2968,7 +2968,7 @@ private void ApplyTeleportingState(NetworkTransformState newState)
29682968
if (isSynchronization)
29692969
{
29702970
// Need to use NetworkManager vs m_CachedNetworkManager here since we are yet to be spawned
2971-
if (ShouldSynchronizeHalfFloat(NetworkManager, NetworkManager.LocalClientId))
2971+
if (ShouldSynchronizeHalfFloat(NetworkManager.LocalClientId))
29722972
{
29732973
m_HalfPositionState.HalfVector3.Axis = newState.NetworkDeltaPosition.HalfVector3.Axis;
29742974
m_HalfPositionState.DeltaPosition = newState.DeltaPosition;
@@ -3321,7 +3321,7 @@ private void OnNetworkStateChanged(NetworkTransformState oldState, NetworkTransf
33213321
}
33223322

33233323
// Get the time when this new state was sent
3324-
newState.SentTime = new NetworkTime(m_CachedNetworkTickRate, newState.NetworkTick).Time;
3324+
newState.SentTime = new NetworkTime(m_CachedNetworkManager.NetworkTickSystem.TickRate, newState.NetworkTick).Time;
33253325

33263326
if (LogStateUpdate)
33273327
{
@@ -3550,7 +3550,7 @@ protected internal override void InternalOnNetworkPostSpawn()
35503550
// Then we want to:
35513551
// - Force the "IsSynchronizing" flag so the NetworkTransform has its state updated properly and runs through the initialization again.
35523552
// - Make sure the SynchronizingState is updated to the instantiated prefab's default flags/settings.
3553-
if (m_CachedNetworkManager.IsServer && !m_CachedNetworkManager.DistributedAuthorityMode && !IsOwner && !OnIsServerAuthoritative() && !SynchronizeState.IsSynchronizing)
3553+
if (NetworkManager.IsServer && !NetworkManager.DistributedAuthorityMode && !IsOwner && !OnIsServerAuthoritative() && !SynchronizeState.IsSynchronizing)
35543554
{
35553555
// Handle the first/root NetworkTransform slightly differently to have a sequenced synchronization of like authority nested NetworkTransform components
35563556
if (m_IsFirstNetworkTransform)
@@ -3578,7 +3578,7 @@ protected internal override void InternalOnNetworkPostSpawn()
35783578
}
35793579

35803580
// Standard non-authority synchronization is handled here
3581-
if (!CanCommitToTransform && m_CachedNetworkManager.IsConnectedClient && SynchronizeState.IsSynchronizing)
3581+
if (!CanCommitToTransform && NetworkManager.IsConnectedClient && SynchronizeState.IsSynchronizing)
35823582
{
35833583
NonAuthorityFinalizeSynchronization();
35843584
}
@@ -3593,7 +3593,6 @@ protected internal override void InternalOnNetworkPostSpawn()
35933593
internal static InterpolationTypes DefaultInterpolationType;
35943594

35953595
internal Transform CachedTransform;
3596-
private uint m_CachedNetworkTickRate;
35973596

35983597
/// <summary>
35993598
/// Create interpolators when first instantiated to avoid memory allocations if the
@@ -3624,7 +3623,6 @@ protected virtual void Awake()
36243623
internal override void InternalOnNetworkPreSpawn(ref NetworkManager networkManager)
36253624
{
36263625
m_CachedNetworkManager = networkManager;
3627-
m_CachedNetworkTickRate = m_CachedNetworkManager.NetworkTickSystem.TickRate;
36283626
CachedTransform = transform;
36293627
base.InternalOnNetworkPreSpawn(ref networkManager);
36303628
}
@@ -3633,6 +3631,7 @@ internal override void InternalOnNetworkPreSpawn(ref NetworkManager networkManag
36333631
public override void OnNetworkSpawn()
36343632
{
36353633
m_ParentedChildren.Clear();
3634+
m_CachedNetworkManager = NetworkManager;
36363635

36373636
Initialize();
36383637

@@ -3650,9 +3649,9 @@ private void CleanUpOnDestroyOrDespawn()
36503649
#else
36513650
var forUpdate = true;
36523651
#endif
3653-
if (m_CachedNetworkObject)
3652+
if (m_CachedNetworkObject != null)
36543653
{
3655-
m_CachedNetworkManager?.NetworkTransformRegistration(m_CachedNetworkObject, forUpdate, false);
3654+
NetworkManager?.NetworkTransformRegistration(m_CachedNetworkObject, forUpdate, false);
36563655
}
36573656

36583657
DeregisterForTickUpdate(this);
@@ -3698,7 +3697,7 @@ protected virtual void OnInitialize(ref NetworkVariable<NetworkTransformState> r
36983697
/// </summary>
36993698
private void ResetInterpolatedStateToCurrentAuthoritativeState()
37003699
{
3701-
var serverTime = m_CachedNetworkManager.ServerTime.Time;
3700+
var serverTime = NetworkManager.ServerTime.Time;
37023701
#if COM_UNITY_MODULES_PHYSICS || COM_UNITY_MODULES_PHYSICS2D
37033702
var position = m_UseRigidbodyForMotion ? m_NetworkRigidbodyInternal.GetPosition() : GetSpaceRelativePosition();
37043703
var rotation = m_UseRigidbodyForMotion ? m_NetworkRigidbodyInternal.GetRotation() : GetSpaceRelativeRotation();
@@ -3720,7 +3719,7 @@ private void ResetInterpolatedStateToCurrentAuthoritativeState()
37203719
}
37213720
private NetworkObject m_CachedNetworkObject;
37223721
/// <summary>
3723-
/// The internal initialization method to allow for internal API adjustments
3722+
/// The internal initialzation method to allow for internal API adjustments
37243723
/// </summary>
37253724
/// <param name="isOwnershipChange"></param>
37263725
private void InternalInitialization(bool isOwnershipChange = false)
@@ -3732,7 +3731,7 @@ private void InternalInitialization(bool isOwnershipChange = false)
37323731
m_CachedNetworkObject = NetworkObject;
37333732

37343733
// Determine if this is the first NetworkTransform in the associated NetworkObject's list
3735-
m_IsFirstNetworkTransform = m_CachedNetworkObject.NetworkTransforms[0] == this;
3734+
m_IsFirstNetworkTransform = NetworkObject.NetworkTransforms[0] == this;
37363735

37373736
if (m_CachedNetworkManager && m_CachedNetworkManager.DistributedAuthorityMode)
37383737
{
@@ -3756,9 +3755,9 @@ private void InternalInitialization(bool isOwnershipChange = false)
37563755
var currentPosition = GetSpaceRelativePosition();
37573756
var currentRotation = GetSpaceRelativeRotation();
37583757

3759-
if (m_CachedNetworkManager.DistributedAuthorityMode)
3758+
if (NetworkManager.DistributedAuthorityMode)
37603759
{
3761-
RegisterNetworkManagerForTickUpdate(m_CachedNetworkManager);
3760+
RegisterNetworkManagerForTickUpdate(NetworkManager);
37623761
}
37633762

37643763
#if COM_UNITY_MODULES_PHYSICS || COM_UNITY_MODULES_PHYSICS2D
@@ -3910,7 +3909,7 @@ private void DefaultParentChanged()
39103909
m_RotationInterpolator.Clear();
39113910

39123911
// Always use NetworkManager here as this can be invoked prior to spawning
3913-
var tempTime = new NetworkTime(NetworkManager.NetworkConfig.TickRate, m_CachedNetworkManager.ServerTime.Tick).Time;
3912+
var tempTime = new NetworkTime(NetworkManager.NetworkConfig.TickRate, NetworkManager.ServerTime.Tick).Time;
39143913
UpdatePositionInterpolator(m_InternalCurrentPosition, tempTime, true);
39153914
m_ScaleInterpolator.ResetTo(m_InternalCurrentScale, tempTime);
39163915
m_RotationInterpolator.ResetTo(m_InternalCurrentRotation, tempTime);
@@ -3942,7 +3941,7 @@ internal override void InternalOnNetworkObjectParentChanged(NetworkObject parent
39423941
if (LastTickSync == m_LocalAuthoritativeNetworkState.GetNetworkTick())
39433942
{
39443943
m_InternalCurrentPosition = m_LastStateTargetPosition = GetSpaceRelativePosition();
3945-
m_PositionInterpolator.ResetTo(m_PositionInterpolator.Parent, m_InternalCurrentPosition, m_CachedNetworkManager.ServerTime.Time);
3944+
m_PositionInterpolator.ResetTo(m_PositionInterpolator.Parent, m_InternalCurrentPosition, NetworkManager.ServerTime.Time);
39463945
if (InLocalSpace)
39473946
{
39483947
transform.localPosition = m_InternalCurrentPosition;
@@ -3974,7 +3973,7 @@ internal override void InternalOnNetworkObjectParentChanged(NetworkObject parent
39743973
{
39753974
m_InternalCurrentRotation = GetSpaceRelativeRotation();
39763975
m_TargetRotation = m_InternalCurrentRotation.eulerAngles;
3977-
m_RotationInterpolator.ResetTo(m_RotationInterpolator.Parent, m_InternalCurrentRotation, m_CachedNetworkManager.ServerTime.Time);
3976+
m_RotationInterpolator.ResetTo(m_RotationInterpolator.Parent, m_InternalCurrentRotation, NetworkManager.ServerTime.Time);
39783977
if (InLocalSpace)
39793978
{
39803979
transform.localRotation = m_InternalCurrentRotation;
@@ -4597,7 +4596,7 @@ internal void TransformStateUpdate()
45974596
{
45984597
// TODO: Investigate where this state should be applied or just discarded.
45994598
// For now, discard the state if we assumed ownership.
4600-
// Debug.Log($"[Client-{m_CachedNetworkManager.LocalClientId}] Ignoring inbound update from Client-{0} and parentUpdated:{isParentingDirective}!");
4599+
// Debug.Log($"[Client-{NetworkManager.LocalClientId}] Ignoring inbound update from Client-{0} and parentUpdated:{isParentingDirective}!");
46014600
return;
46024601
}
46034602
// Store the previous/old state
@@ -4658,13 +4657,13 @@ private void UpdateTransformState()
46584657
{
46594658
continue;
46604659
}
4661-
m_CachedNetworkManager.MessageManager.SendMessage(ref m_OutboundMessage, networkDelivery, clientId);
4660+
NetworkManager.MessageManager.SendMessage(ref m_OutboundMessage, networkDelivery, clientId);
46624661
}
46634662
}
46644663
else
46654664
{
46664665
// Clients (owner authoritative) send messages to the server-host
4667-
m_CachedNetworkManager.MessageManager.SendMessage(ref m_OutboundMessage, networkDelivery, NetworkManager.ServerClientId);
4666+
NetworkManager.MessageManager.SendMessage(ref m_OutboundMessage, networkDelivery, NetworkManager.ServerClientId);
46684667
}
46694668
m_LocalAuthoritativeNetworkState.LastSerializedSize = m_OutboundMessage.BytesWritten;
46704669
}
@@ -4803,7 +4802,7 @@ public NetworkTransformTickRegistration(NetworkManager networkManager)
48034802
internal void RegisterForTickSynchronization()
48044803
{
48054804
s_TickSynchPosition++;
4806-
m_NextTickSync = m_CachedNetworkManager.ServerTime.Tick + (s_TickSynchPosition % (int)NetworkManager.NetworkConfig.TickRate);
4805+
m_NextTickSync = NetworkManager.ServerTime.Tick + (s_TickSynchPosition % (int)NetworkManager.NetworkConfig.TickRate);
48074806
}
48084807

48094808
private static void RegisterNetworkManagerForTickUpdate(NetworkManager networkManager)
@@ -4822,14 +4821,14 @@ private static void RegisterNetworkManagerForTickUpdate(NetworkManager networkMa
48224821
/// <param name="networkTransform"></param>
48234822
private static void RegisterForTickUpdate(NetworkTransform networkTransform)
48244823
{
4825-
var networkManager = networkTransform.NetworkManager;
4826-
if (!networkManager.DistributedAuthorityMode && !s_NetworkTickRegistration.ContainsKey(networkManager))
4824+
4825+
if (!networkTransform.NetworkManager.DistributedAuthorityMode && !s_NetworkTickRegistration.ContainsKey(networkTransform.NetworkManager))
48274826
{
4828-
s_NetworkTickRegistration.Add(networkManager, new NetworkTransformTickRegistration(networkManager));
4827+
s_NetworkTickRegistration.Add(networkTransform.NetworkManager, new NetworkTransformTickRegistration(networkTransform.NetworkManager));
48294828
}
48304829

48314830
networkTransform.RegisterForTickSynchronization();
4832-
s_NetworkTickRegistration[networkManager].NetworkTransforms.Add(networkTransform);
4831+
s_NetworkTickRegistration[networkTransform.NetworkManager].NetworkTransforms.Add(networkTransform);
48334832
}
48344833

48354834
/// <summary>
@@ -4839,17 +4838,16 @@ private static void RegisterForTickUpdate(NetworkTransform networkTransform)
48394838
/// <param name="networkTransform"></param>
48404839
private static void DeregisterForTickUpdate(NetworkTransform networkTransform)
48414840
{
4842-
var networkManager = networkTransform.NetworkManager;
4843-
if (!networkManager)
4841+
if (networkTransform.NetworkManager == null)
48444842
{
48454843
return;
48464844
}
4847-
if (s_NetworkTickRegistration.ContainsKey(networkManager))
4845+
if (s_NetworkTickRegistration.ContainsKey(networkTransform.NetworkManager))
48484846
{
4849-
s_NetworkTickRegistration[networkManager].NetworkTransforms.Remove(networkTransform);
4850-
if (!networkManager.DistributedAuthorityMode && s_NetworkTickRegistration[networkManager].NetworkTransforms.Count == 0)
4847+
s_NetworkTickRegistration[networkTransform.NetworkManager].NetworkTransforms.Remove(networkTransform);
4848+
if (!networkTransform.NetworkManager.DistributedAuthorityMode && s_NetworkTickRegistration[networkTransform.NetworkManager].NetworkTransforms.Count == 0)
48514849
{
4852-
var registrationEntry = s_NetworkTickRegistration[networkManager];
4850+
var registrationEntry = s_NetworkTickRegistration[networkTransform.NetworkManager];
48534851
registrationEntry.Remove();
48544852
}
48554853
}

0 commit comments

Comments
 (0)