Skip to content

Commit e73b88a

Browse files
update
removed the unnecessary else if (useInterpolatedValue) condition and re-organized it such that it checks to see if it needs to apply interpolation or just depends upon the state to apply the values directly. Added additional comments about this area of the code and future improvements.
1 parent 376ec61 commit e73b88a

File tree

1 file changed

+25
-15
lines changed

1 file changed

+25
-15
lines changed

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

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -704,21 +704,7 @@ private void ApplyAuthoritativeState()
704704
// We always apply the interpolated state for any axis we are synchronizing even when the state has no deltas
705705
// to assure we fully interpolate to our target even after we stop extrapolating 1 tick later.
706706
var useInterpolatedValue = !networkState.IsTeleportingNextFrame && Interpolate;
707-
if (!useInterpolatedValue)
708-
{
709-
if (networkState.HasPositionX) { adjustedPosition.x = networkState.PositionX; }
710-
if (networkState.HasPositionY) { adjustedPosition.y = networkState.PositionY; }
711-
if (networkState.HasPositionZ) { adjustedPosition.z = networkState.PositionZ; }
712-
713-
if (networkState.HasScaleX) { adjustedScale.x = networkState.ScaleX; }
714-
if (networkState.HasScaleY) { adjustedScale.y = networkState.ScaleY; }
715-
if (networkState.HasScaleZ) { adjustedScale.z = networkState.ScaleZ; }
716-
717-
if (networkState.HasRotAngleX) { adjustedRotAngles.x = networkState.RotAngleX; }
718-
if (networkState.HasRotAngleY) { adjustedRotAngles.y = networkState.RotAngleY; }
719-
if (networkState.HasRotAngleZ) { adjustedRotAngles.z = networkState.RotAngleZ; }
720-
}
721-
else if (useInterpolatedValue)
707+
if (useInterpolatedValue)
722708
{
723709
if (SyncPositionX) { adjustedPosition.x = m_PositionXInterpolator.GetInterpolatedValue(); }
724710
if (SyncPositionY) { adjustedPosition.y = m_PositionYInterpolator.GetInterpolatedValue(); }
@@ -736,6 +722,30 @@ private void ApplyAuthoritativeState()
736722
if (SyncRotAngleZ) { adjustedRotAngles.z = interpolatedEulerAngles.z; }
737723
}
738724
}
725+
else
726+
{
727+
if (networkState.HasPositionX) { adjustedPosition.x = networkState.PositionX; }
728+
if (networkState.HasPositionY) { adjustedPosition.y = networkState.PositionY; }
729+
if (networkState.HasPositionZ) { adjustedPosition.z = networkState.PositionZ; }
730+
731+
if (networkState.HasScaleX) { adjustedScale.x = networkState.ScaleX; }
732+
if (networkState.HasScaleY) { adjustedScale.y = networkState.ScaleY; }
733+
if (networkState.HasScaleZ) { adjustedScale.z = networkState.ScaleZ; }
734+
735+
if (networkState.HasRotAngleX) { adjustedRotAngles.x = networkState.RotAngleX; }
736+
if (networkState.HasRotAngleY) { adjustedRotAngles.y = networkState.RotAngleY; }
737+
if (networkState.HasRotAngleZ) { adjustedRotAngles.z = networkState.RotAngleZ; }
738+
}
739+
740+
// NOTE: The below conditional checks for applying axial values are required in order to
741+
// prevent the non-authoritative side from making adjustments when interpolation is off.
742+
743+
// TODO: Determine if we want to enforce, frame by frame, the non-authoritative transform values.
744+
// We would want save the position, rotation, and scale (each individually) after applying each
745+
// authoritative transform state received. Otherwise, the non-authoritative side could make
746+
// changes to an axial value (if interpolation is turned off) until authority sends an update for
747+
// that same axial value. When interpolation is on, the state's values being synchronized are
748+
// always applied each frame.
739749

740750
// Apply the new position if it has changed or we are interpolating and synchronizing position
741751
if (networkState.HasPositionChange || (useInterpolatedValue && SynchronizePosition))

0 commit comments

Comments
 (0)