Skip to content

Commit d7f14dc

Browse files
update
Some fixes for the one test that was failing and more TestFixture additions.
1 parent 69480f0 commit d7f14dc

File tree

4 files changed

+84
-20
lines changed

4 files changed

+84
-20
lines changed

com.unity.netcode.gameobjects/Editor/NetworkTransformEditor.cs

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@ public class NetworkTransformEditor : NetcodeEditorBase<NetworkTransform>
2828
private SerializedProperty m_ScaleThresholdProperty;
2929
private SerializedProperty m_InLocalSpaceProperty;
3030
private SerializedProperty m_InterpolateProperty;
31-
private SerializedProperty m_InterpolationTypeProperty;
31+
private SerializedProperty m_PositionInterpolationTypeProperty;
32+
private SerializedProperty m_RotationInterpolationTypeProperty;
33+
private SerializedProperty m_ScaleInterpolationTypeProperty;
3234

3335
private SerializedProperty m_UseQuaternionSynchronization;
3436
private SerializedProperty m_UseQuaternionCompression;
@@ -62,7 +64,12 @@ public override void OnEnable()
6264
m_ScaleThresholdProperty = serializedObject.FindProperty(nameof(NetworkTransform.ScaleThreshold));
6365
m_InLocalSpaceProperty = serializedObject.FindProperty(nameof(NetworkTransform.InLocalSpace));
6466
m_InterpolateProperty = serializedObject.FindProperty(nameof(NetworkTransform.Interpolate));
65-
m_InterpolationTypeProperty = serializedObject.FindProperty(nameof(NetworkTransform.InterpolationType));
67+
68+
m_PositionInterpolationTypeProperty = serializedObject.FindProperty(nameof(NetworkTransform.PositionInterpolationType));
69+
m_RotationInterpolationTypeProperty = serializedObject.FindProperty(nameof(NetworkTransform.RotationInterpolationType));
70+
m_ScaleInterpolationTypeProperty = serializedObject.FindProperty(nameof(NetworkTransform.ScaleInterpolationType));
71+
72+
6673
m_UseQuaternionSynchronization = serializedObject.FindProperty(nameof(NetworkTransform.UseQuaternionSynchronization));
6774
m_UseQuaternionCompression = serializedObject.FindProperty(nameof(NetworkTransform.UseQuaternionCompression));
6875
m_UseHalfFloatPrecision = serializedObject.FindProperty(nameof(NetworkTransform.UseHalfFloatPrecision));
@@ -163,7 +170,18 @@ private void DisplayNetworkTransformProperties()
163170
EditorGUILayout.PropertyField(m_InterpolateProperty);
164171
if (networkTransform.Interpolate)
165172
{
166-
EditorGUILayout.PropertyField(m_InterpolationTypeProperty);
173+
if (networkTransform.SynchronizePosition)
174+
{
175+
EditorGUILayout.PropertyField(m_PositionInterpolationTypeProperty);
176+
}
177+
if (networkTransform.SynchronizeRotation)
178+
{
179+
EditorGUILayout.PropertyField(m_RotationInterpolationTypeProperty);
180+
}
181+
if (networkTransform.SynchronizeScale)
182+
{
183+
EditorGUILayout.PropertyField(m_ScaleInterpolationTypeProperty);
184+
}
167185
}
168186
}
169187
EditorGUILayout.PropertyField(m_SlerpPosition);

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

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -952,12 +952,28 @@ public enum InterpolationTypes
952952
}
953953

954954
/// <summary>
955-
/// The interpolation type to use for the <see cref="NetworkTransform"/> instance.
955+
/// The position interpolation type to use for the <see cref="NetworkTransform"/> instance.
956956
/// </summary>
957957
/// <remarks>
958958
/// For more details review <see cref="InterpolationTypes"/>.
959959
/// </remarks>
960-
public InterpolationTypes InterpolationType;
960+
public InterpolationTypes PositionInterpolationType;
961+
962+
/// <summary>
963+
/// The rotation interpolation type to use for the <see cref="NetworkTransform"/> instance.
964+
/// </summary>
965+
/// <remarks>
966+
/// For more details review <see cref="InterpolationTypes"/>.
967+
/// </remarks>
968+
public InterpolationTypes RotationInterpolationType;
969+
970+
/// <summary>
971+
/// The scale interpolation type to use for the <see cref="NetworkTransform"/> instance.
972+
/// </summary>
973+
/// <remarks>
974+
/// For more details review <see cref="InterpolationTypes"/>.
975+
/// </remarks>
976+
public InterpolationTypes ScaleInterpolationType;
961977

962978
/// <summary>
963979
/// When <see cref="Interpolate"/> is enabled and using <see cref="InterpolationTypes.Lerp"/>, this adjust the maximum interpolation time for position.
@@ -1084,7 +1100,7 @@ public enum AuthorityModes
10841100
/// </remarks>
10851101
public bool SyncPositionZ = true;
10861102

1087-
private bool SynchronizePosition
1103+
internal bool SynchronizePosition
10881104
{
10891105
get
10901106
{
@@ -1119,7 +1135,7 @@ private bool SynchronizePosition
11191135
/// </remarks>
11201136
public bool SyncRotAngleZ = true;
11211137

1122-
private bool SynchronizeRotation
1138+
internal bool SynchronizeRotation
11231139
{
11241140
get
11251141
{
@@ -1151,7 +1167,7 @@ private bool SynchronizeRotation
11511167
/// </remarks>
11521168
public bool SyncScaleZ = true;
11531169

1154-
private bool SynchronizeScale
1170+
internal bool SynchronizeScale
11551171
{
11561172
get
11571173
{
@@ -3187,7 +3203,9 @@ protected virtual void Awake()
31873203
{
31883204
if (AssignDefaultInterpolationType)
31893205
{
3190-
InterpolationType = DefaultInterpolationType;
3206+
PositionInterpolationType = DefaultInterpolationType;
3207+
RotationInterpolationType = DefaultInterpolationType;
3208+
ScaleInterpolationType = DefaultInterpolationType;
31913209
}
31923210
// Rotation is a single Quaternion since each Euler axis will affect the quaternion's final value
31933211
m_RotationInterpolator = new BufferedLinearInterpolatorQuaternion();
@@ -3771,12 +3789,10 @@ private void UpdateInterpolation()
37713789
var minDeltaTime = m_CachedNetworkManager.LocalTime.FixedDeltaTime;
37723790
var maxDeltaTime = (tickLatency * m_CachedNetworkManager.ServerTime.FixedDeltaTime);
37733791

3774-
var useLerp = InterpolationType == InterpolationTypes.Lerp;
3775-
37763792
// Now only update the interpolators for the portions of the transform being synchronized
37773793
if (SynchronizePosition)
37783794
{
3779-
if (useLerp)
3795+
if (PositionInterpolationType == InterpolationTypes.Lerp)
37803796
{
37813797
m_PositionInterpolator.MaximumInterpolationTime = PositionMaxInterpolationTime;
37823798
m_PositionInterpolator.Update(cachedDeltaTime, tickLatencyAsTime, cachedServerTime);
@@ -3789,7 +3805,7 @@ private void UpdateInterpolation()
37893805

37903806
if (SynchronizeRotation)
37913807
{
3792-
if (useLerp)
3808+
if (RotationInterpolationType == InterpolationTypes.Lerp)
37933809
{
37943810
m_RotationInterpolator.MaximumInterpolationTime = RotationMaxInterpolationTime;
37953811
// When using half precision Lerp towards the target rotation.
@@ -3806,7 +3822,7 @@ private void UpdateInterpolation()
38063822

38073823
if (SynchronizeScale)
38083824
{
3809-
if (useLerp)
3825+
if (ScaleInterpolationType == InterpolationTypes.Lerp)
38103826
{
38113827
m_ScaleInterpolator.MaximumInterpolationTime = ScaleMaxInterpolationTime;
38123828
m_ScaleInterpolator.Update(cachedDeltaTime, tickLatencyAsTime, cachedServerTime);

com.unity.netcode.gameobjects/Tests/Runtime/NetworkTransform/NetworkTransformGeneral.cs

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,36 @@
44

55
namespace Unity.Netcode.RuntimeTests
66
{
7-
[TestFixture(HostOrServer.Host, Authority.OwnerAuthority)]
8-
[TestFixture(HostOrServer.Host, Authority.ServerAuthority)]
7+
[TestFixture(HostOrServer.Host, Authority.OwnerAuthority, NetworkTransform.InterpolationTypes.Lerp)]
8+
[TestFixture(HostOrServer.Host, Authority.ServerAuthority, NetworkTransform.InterpolationTypes.Lerp)]
9+
[TestFixture(HostOrServer.Host, Authority.OwnerAuthority, NetworkTransform.InterpolationTypes.SmoothDampening)]
10+
[TestFixture(HostOrServer.Host, Authority.ServerAuthority, NetworkTransform.InterpolationTypes.SmoothDampening)]
911
internal class NetworkTransformGeneral : NetworkTransformBase
1012
{
11-
public NetworkTransformGeneral(HostOrServer testWithHost, Authority authority) :
13+
public NetworkTransformGeneral(HostOrServer testWithHost, Authority authority, NetworkTransform.InterpolationTypes interpolationType) :
1214
base(testWithHost, authority, RotationCompression.None, Rotation.Euler, Precision.Full)
13-
{ }
15+
{
16+
NetworkTransform.AssignDefaultInterpolationType = true;
17+
NetworkTransform.DefaultInterpolationType = interpolationType;
18+
}
1419

1520
protected override bool m_EnableTimeTravel => true;
1621
protected override bool m_SetupIsACoroutine => false;
1722
protected override bool m_TearDownIsACoroutine => false;
1823

24+
protected override void OnInlineTearDown()
25+
{
26+
m_EnableVerboseDebug = false;
27+
base.OnInlineTearDown();
28+
}
29+
30+
protected override void OnOneTimeTearDown()
31+
{
32+
NetworkTransform.AssignDefaultInterpolationType = false;
33+
NetworkTransform.DefaultInterpolationType = NetworkTransform.InterpolationTypes.Lerp;
34+
base.OnOneTimeTearDown();
35+
}
36+
1937
/// <summary>
2038
/// Test to verify nonAuthority cannot change the transform directly
2139
/// </summary>
@@ -268,21 +286,26 @@ public void TestMultipleExplicitSetStates([Values] Interpolation interpolation)
268286
[Test]
269287
public void NonAuthorityOwnerSettingStateTest([Values] Interpolation interpolation)
270288
{
289+
m_EnableVerboseDebug = true;
271290
var interpolate = interpolation == Interpolation.EnableInterpolate;
272291
m_AuthoritativeTransform.Interpolate = interpolate;
273292
m_NonAuthoritativeTransform.Interpolate = interpolate;
274293
m_NonAuthoritativeTransform.RotAngleThreshold = m_AuthoritativeTransform.RotAngleThreshold = 0.1f;
294+
// Give a little bit of time before sending things with this test
295+
for (int i = 0; i < 10; i++)
296+
{
297+
TimeTravelAdvanceTick();
298+
}
275299

276300
// Test one parameter at a time first
277301
var newPosition = new Vector3(125f, 35f, 65f);
278302
var newRotation = Quaternion.Euler(1, 2, 3);
279303
var newScale = new Vector3(2.0f, 2.0f, 2.0f);
280304
m_NonAuthoritativeTransform.SetState(newPosition, null, null, interpolate);
281-
var success = WaitForConditionOrTimeOutWithTimeTravel(() => PositionsMatchesValue(newPosition));
305+
var success = WaitForConditionOrTimeOutWithTimeTravel(() => PositionsMatchesValue(newPosition), 120);
282306
Assert.True(success, $"Timed out waiting for non-authoritative position state request to be applied!");
283307
Assert.True(Approximately(newPosition, m_AuthoritativeTransform.transform.position), "Authoritative position does not match!");
284308
Assert.True(Approximately(newPosition, m_NonAuthoritativeTransform.transform.position), "Non-Authoritative position does not match!");
285-
286309
m_NonAuthoritativeTransform.SetState(null, newRotation, null, interpolate);
287310
success = WaitForConditionOrTimeOutWithTimeTravel(() => RotationMatchesValue(newRotation.eulerAngles));
288311
Assert.True(success, $"Timed out waiting for non-authoritative rotation state request to be applied!");

com.unity.netcode.gameobjects/Tests/Runtime/NetworkTransform/NetworkTransformTests.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,13 @@ public NetworkTransformTests(HostOrServer testWithHost, Authority authority, Rot
7171
NetworkTransform.DefaultInterpolationType = interpolation;
7272
}
7373

74+
protected override void OnOneTimeTearDown()
75+
{
76+
NetworkTransform.AssignDefaultInterpolationType = false;
77+
NetworkTransform.DefaultInterpolationType = NetworkTransform.InterpolationTypes.Lerp;
78+
base.OnOneTimeTearDown();
79+
}
80+
7481
protected override bool m_EnableTimeTravel => true;
7582
protected override bool m_SetupIsACoroutine => false;
7683
protected override bool m_TearDownIsACoroutine => false;

0 commit comments

Comments
 (0)