Skip to content

Commit c3493fe

Browse files
committed
Update naming and code comments to be clearer
1 parent 2456a82 commit c3493fe

File tree

2 files changed

+42
-32
lines changed

2 files changed

+42
-32
lines changed

com.unity.netcode.gameobjects/Runtime/Messaging/Messages/NetworkTransformMessage.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,15 +73,15 @@ public bool Deserialize(FastBufferReader reader, ref NetworkContext context, int
7373
networkObject = networkManager.SpawnManager.SpawnedObjects[networkObjectId];
7474
if (networkObject.ChildNetworkBehaviours.Count <= networkBehaviourId || networkObject.ChildNetworkBehaviours[networkBehaviourId] == null)
7575
{
76-
Debug.LogError($"[{nameof(NetworkTransformMessage)}][Invalid][length] Targeted {nameof(NetworkTransform)}, {nameof(NetworkBehaviour.NetworkBehaviourId)} ({networkBehaviourId}), does not exist! Make sure you are not spawning {nameof(NetworkObject)}s with disabled {nameof(GameObject)}s that have {nameof(NetworkBehaviour)} components on them.");
76+
Debug.LogError($"[{nameof(NetworkTransformMessage)}][Invalid] Targeted {nameof(NetworkTransform)}, {nameof(NetworkBehaviour.NetworkBehaviourId)} ({networkBehaviourId}), does not exist! Make sure you are not spawning {nameof(NetworkObject)}s with disabled {nameof(GameObject)}s that have {nameof(NetworkBehaviour)} components on them.");
7777
return false;
7878
}
7979

8080
// Get the target NetworkTransform
8181
var transform = networkObject.ChildNetworkBehaviours[networkBehaviourId] as NetworkTransform;
8282
if (transform == null)
8383
{
84-
Debug.LogError($"[{nameof(NetworkTransformMessage)}][Invalid][cast] Targeted {nameof(NetworkTransform)}, {nameof(NetworkBehaviour.NetworkBehaviourId)} ({networkBehaviourId}), does not exist! Make sure you are not spawning {nameof(NetworkObject)}s with disabled {nameof(GameObject)}s that have {nameof(NetworkBehaviour)} components on them.");
84+
Debug.LogError($"[{nameof(NetworkTransformMessage)}][Invalid] Targeted {nameof(NetworkTransform)}, {nameof(NetworkBehaviour.NetworkBehaviourId)} ({networkBehaviourId}), does not exist! Make sure you are not spawning {nameof(NetworkObject)}s with disabled {nameof(GameObject)}s that have {nameof(NetworkBehaviour)} components on them.");
8585
return false;
8686
}
8787

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

Lines changed: 40 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ internal class NetworkTransformErrorTests : NetcodeIntegrationTest
1111
{
1212
protected override int NumberOfClients => 1;
1313

14-
private GameObject m_ServerPrefab;
15-
private GameObject m_ClientPrefab;
14+
private GameObject m_AuthorityPrefab;
15+
private GameObject m_NonAuthorityPrefab;
1616

1717
private HostAndClientPrefabHandler m_HostAndClientPrefabHandler;
1818

@@ -24,23 +24,30 @@ public class EmptyNetworkBehaviour : NetworkBehaviour { }
2424
/// </summary>
2525
private class HostAndClientPrefabHandler : INetworkPrefabInstanceHandler
2626
{
27-
private readonly GameObject m_HostPrefab;
28-
private readonly GameObject m_ClientPrefab;
29-
30-
public HostAndClientPrefabHandler(GameObject hostPrefab, GameObject clientPrefab)
27+
/// <summary>
28+
/// The registered prefab is the prefab the networking stack is instantiated with.
29+
/// Registering the prefab simulates the prefab that exists on the authority.
30+
/// </summary>
31+
private readonly GameObject m_RegisteredPrefab;
32+
33+
/// <summary>
34+
/// Mocks the registered prefab changing on the non-authority after registration.
35+
/// Allows testing situations mismatched GameObject state between the authority and non-authority.
36+
/// </summary>
37+
private readonly GameObject m_InstantiatedPrefab;
38+
39+
public HostAndClientPrefabHandler(GameObject authorityPrefab, GameObject nonAuthorityPrefab)
3140
{
32-
m_HostPrefab = hostPrefab;
33-
m_ClientPrefab = clientPrefab;
41+
m_RegisteredPrefab = authorityPrefab;
42+
m_InstantiatedPrefab = nonAuthorityPrefab;
3443
}
3544

45+
/// <summary>
46+
/// Returns the prefab that will mock the instantiated prefab not matching the registered prefab
47+
/// </summary>
3648
public NetworkObject Instantiate(ulong ownerClientId, Vector3 position, Quaternion rotation)
3749
{
38-
// Owner clientID
39-
if (ownerClientId == 0)
40-
{
41-
return Object.Instantiate(m_ClientPrefab).GetComponent<NetworkObject>();
42-
}
43-
return Object.Instantiate(m_HostPrefab).GetComponent<NetworkObject>();
50+
return Object.Instantiate(m_InstantiatedPrefab).GetComponent<NetworkObject>();
4451
}
4552

4653
public void Destroy(NetworkObject networkObject)
@@ -50,7 +57,8 @@ public void Destroy(NetworkObject networkObject)
5057

5158
public void Register(NetworkManager networkManager)
5259
{
53-
networkManager.PrefabHandler.AddHandler(m_HostPrefab, this);
60+
// Register the version that will be spawned by the authority (i.e. Host)
61+
networkManager.PrefabHandler.AddHandler(m_RegisteredPrefab, this);
5462
}
5563
}
5664

@@ -67,18 +75,20 @@ private static void AddChildToNetworkObject<T>(Transform transform) where T : Co
6775

6876
protected override void OnServerAndClientsCreated()
6977
{
70-
// Full non-disabled GameObjects prefab on server side
71-
m_ServerPrefab = CreateNetworkObjectPrefab("ServerPrefab");
72-
AddChildToNetworkObject<EmptyNetworkBehaviour>(m_ServerPrefab.transform);
73-
AddChildToNetworkObject<EmptyNetworkBehaviour>(m_ServerPrefab.transform);
74-
AddChildToNetworkObject<NetworkTransform>(m_ServerPrefab.transform);
75-
76-
// Mock disabled GameObjects prefab on client side
77-
m_ClientPrefab = CreateNetworkObjectPrefab("ClientPrefab");
78-
AddChildToNetworkObject<NetworkTransform>(m_ClientPrefab.transform);
79-
80-
// Create and register prefab handler to handle server and client versions of prefabs
81-
m_HostAndClientPrefabHandler = new HostAndClientPrefabHandler(m_ServerPrefab, m_ClientPrefab);
78+
// Create a prefab that has many child NetworkBehaviours
79+
m_AuthorityPrefab = CreateNetworkObjectPrefab("AuthorityPrefab");
80+
AddChildToNetworkObject<EmptyNetworkBehaviour>(m_AuthorityPrefab.transform);
81+
AddChildToNetworkObject<EmptyNetworkBehaviour>(m_AuthorityPrefab.transform);
82+
AddChildToNetworkObject<NetworkTransform>(m_AuthorityPrefab.transform);
83+
84+
// Create a second prefab with only one NetworkBehaviour
85+
// This simulates the GameObjects on the other NetworkBehaviours being disabled
86+
m_NonAuthorityPrefab = CreateNetworkObjectPrefab("NonAuthorityPrefab");
87+
AddChildToNetworkObject<NetworkTransform>(m_NonAuthorityPrefab.transform);
88+
89+
// Create and register a prefab handler
90+
// The prefab handler will behave as if the GameObjects have been disabled on the non-authority client
91+
m_HostAndClientPrefabHandler = new HostAndClientPrefabHandler(m_AuthorityPrefab, m_NonAuthorityPrefab);
8292
m_HostAndClientPrefabHandler.Register(m_ServerNetworkManager);
8393
foreach (var client in m_ClientNetworkManagers)
8494
{
@@ -92,14 +102,14 @@ protected override void OnServerAndClientsCreated()
92102
[UnityTest]
93103
public IEnumerator DisabledGameObjectErrorTest()
94104
{
95-
var instance = SpawnObject(m_ServerPrefab, m_ServerNetworkManager);
105+
var instance = SpawnObject(m_AuthorityPrefab, m_ServerNetworkManager);
96106
var networkObjectInstance = instance.GetComponent<NetworkObject>();
97107

98108
yield return WaitForConditionOrTimeOut(() => ObjectSpawnedOnAllClients(networkObjectInstance.NetworkObjectId));
99109
AssertOnTimeout("Timed out waiting for object to spawn!");
100110

101-
LogAssert.Expect(LogType.Error, "[Netcode] NetworkBehaviour index 3 was out of bounds for ClientPrefab(Clone). NetworkBehaviours must be the same, and in the same order, between server and client.");
102-
LogAssert.Expect(LogType.Error, "[NetworkTransformMessage][Invalid][length] Targeted NetworkTransform, NetworkBehaviourId (3), does not exist! Make sure you are not spawning NetworkObjects with disabled GameObjects that have NetworkBehaviour components on them.");
111+
LogAssert.Expect(LogType.Error, "[Netcode] NetworkBehaviour index 3 was out of bounds for NonAuthorityPrefab(Clone). NetworkBehaviours must be the same, and in the same order, between server and client.");
112+
LogAssert.Expect(LogType.Error, "[NetworkTransformMessage][Invalid] Targeted NetworkTransform, NetworkBehaviourId (3), does not exist! Make sure you are not spawning NetworkObjects with disabled GameObjects that have NetworkBehaviour components on them.");
103113

104114
yield return new WaitForSeconds(0.3f);
105115
}

0 commit comments

Comments
 (0)