Skip to content

Commit 656b185

Browse files
authored
test: making the TransformInterpolationTests more robust by waiting for the objects to place themselves before checking their position (#1903)
1 parent 595a3e5 commit 656b185

File tree

1 file changed

+35
-14
lines changed

1 file changed

+35
-14
lines changed

com.unity.netcode.gameobjects/Tests/Runtime/TransformInterpolationTests.cs

Lines changed: 35 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,15 @@ public class TransformInterpolationTests : NetcodeIntegrationTest
5757
{
5858
protected override int NumberOfClients => 1;
5959

60-
private ulong m_ClientId0;
6160
private GameObject m_PrefabToSpawn;
6261

63-
private NetworkObject m_AsNetworkObject;
62+
private NetworkObject m_SpawnedAsNetworkObject;
6463
private NetworkObject m_SpawnedObjectOnClient;
6564

65+
private NetworkObject m_BaseAsNetworkObject;
66+
private NetworkObject m_BaseOnClient;
67+
68+
6669
protected override void OnServerAndClientsCreated()
6770
{
6871
m_PrefabToSpawn = CreateNetworkObjectPrefab("InterpTestObject");
@@ -74,41 +77,59 @@ private IEnumerator RefreshNetworkObjects()
7477
{
7578
var clientId = m_ClientNetworkManagers[0].LocalClientId;
7679
yield return WaitForConditionOrTimeOut(() => s_GlobalNetworkObjects.ContainsKey(clientId) &&
77-
s_GlobalNetworkObjects[clientId].ContainsKey(m_AsNetworkObject.NetworkObjectId));
80+
s_GlobalNetworkObjects[clientId].ContainsKey(m_BaseAsNetworkObject.NetworkObjectId) &&
81+
s_GlobalNetworkObjects[clientId].ContainsKey(m_SpawnedAsNetworkObject.NetworkObjectId));
7882

79-
Assert.False(s_GlobalTimeoutHelper.TimedOut, $"Timed out waiting for client side {nameof(NetworkObject)} ID of {m_AsNetworkObject.NetworkObjectId}");
80-
m_SpawnedObjectOnClient = s_GlobalNetworkObjects[clientId][m_AsNetworkObject.NetworkObjectId];
83+
Assert.False(s_GlobalTimeoutHelper.TimedOut, $"Timed out waiting for client side {nameof(NetworkObject)} ID of {m_SpawnedAsNetworkObject.NetworkObjectId}");
84+
85+
m_BaseOnClient = s_GlobalNetworkObjects[clientId][m_BaseAsNetworkObject.NetworkObjectId];
86+
// make sure the objects are set with the right network manager
87+
m_BaseOnClient.NetworkManagerOwner = m_ClientNetworkManagers[0];
88+
89+
m_SpawnedObjectOnClient = s_GlobalNetworkObjects[clientId][m_SpawnedAsNetworkObject.NetworkObjectId];
8190
// make sure the objects are set with the right network manager
8291
m_SpawnedObjectOnClient.NetworkManagerOwner = m_ClientNetworkManagers[0];
92+
93+
8394
}
8495

8596
[UnityTest]
8697
public IEnumerator TransformInterpolationTest()
8798
{
88-
m_ClientId0 = m_ClientNetworkManagers[0].LocalClientId;
89-
9099
// create an object
91100
var spawnedObject = Object.Instantiate(m_PrefabToSpawn);
92101
var baseObject = Object.Instantiate(m_PrefabToSpawn);
93102
baseObject.GetComponent<NetworkObject>().NetworkManagerOwner = m_ServerNetworkManager;
94103
baseObject.GetComponent<NetworkObject>().Spawn();
95104

96-
m_AsNetworkObject = spawnedObject.GetComponent<NetworkObject>();
97-
m_AsNetworkObject.NetworkManagerOwner = m_ServerNetworkManager;
105+
m_SpawnedAsNetworkObject = spawnedObject.GetComponent<NetworkObject>();
106+
m_SpawnedAsNetworkObject.NetworkManagerOwner = m_ServerNetworkManager;
107+
108+
m_BaseAsNetworkObject = baseObject.GetComponent<NetworkObject>();
109+
m_BaseAsNetworkObject.NetworkManagerOwner = m_ServerNetworkManager;
110+
98111

99-
m_AsNetworkObject.TrySetParent(baseObject);
112+
m_SpawnedAsNetworkObject.TrySetParent(baseObject);
100113

101-
m_AsNetworkObject.Spawn();
114+
m_SpawnedAsNetworkObject.Spawn();
102115

103116
yield return RefreshNetworkObjects();
104117

105-
m_AsNetworkObject.TrySetParent(baseObject);
118+
m_SpawnedAsNetworkObject.TrySetParent(baseObject);
106119

107120
baseObject.GetComponent<TransformInterpolationObject>().IsFixed = true;
108121
spawnedObject.GetComponent<TransformInterpolationObject>().IsMoving = true;
109122

110-
// Give two seconds for the object to settle
111-
yield return new WaitForSeconds(2.0f);
123+
const float maxPlacementError = 0.01f;
124+
125+
// Wait for the base object to place itself on both instances
126+
while (m_BaseOnClient.transform.position.y < 1000 - maxPlacementError ||
127+
m_BaseOnClient.transform.position.y > 1000 + maxPlacementError ||
128+
baseObject.transform.position.y < 1000 - maxPlacementError ||
129+
baseObject.transform.position.y > 1000 + maxPlacementError)
130+
{
131+
yield return new WaitForSeconds(0.01f);
132+
}
112133

113134
m_SpawnedObjectOnClient.GetComponent<TransformInterpolationObject>().CheckPosition = true;
114135

0 commit comments

Comments
 (0)