Skip to content

Commit 2621a19

Browse files
authored
feat: log warning if detected child NetworkObjects under a NetworkPrefab (#938)
1 parent 7ed627c commit 2621a19

File tree

1 file changed

+23
-10
lines changed

1 file changed

+23
-10
lines changed

com.unity.multiplayer.mlapi/Runtime/Core/NetworkManager.cs

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -274,42 +274,55 @@ private void OnValidate()
274274
// Check network prefabs and assign to dictionary for quick look up
275275
for (int i = 0; i < NetworkConfig.NetworkPrefabs.Count; i++)
276276
{
277-
if (NetworkConfig.NetworkPrefabs[i] != null && NetworkConfig.NetworkPrefabs[i].Prefab != null)
277+
var networkPrefab = NetworkConfig.NetworkPrefabs[i];
278+
if (networkPrefab != null && networkPrefab.Prefab != null)
278279
{
279-
var networkObject = NetworkConfig.NetworkPrefabs[i].Prefab.GetComponent<NetworkObject>();
280+
var networkObject = networkPrefab.Prefab.GetComponent<NetworkObject>();
280281
if (networkObject == null)
281282
{
282283
if (NetworkLog.CurrentLogLevel <= LogLevel.Normal)
283284
{
284-
NetworkLog.LogWarning($"{nameof(NetworkPrefab)} [{i}] does not have a {nameof(NetworkObject)} component");
285+
NetworkLog.LogError($"Cannot register {nameof(NetworkPrefab)}[{i}], it does not have a {nameof(NetworkObject)} component at its root");
285286
}
286287
}
287288
else
288289
{
290+
{
291+
var childNetworkObjects = new List<NetworkObject>();
292+
networkPrefab.Prefab.GetComponentsInChildren(/* includeInactive = */ true, childNetworkObjects);
293+
if (childNetworkObjects.Count > 1) // total count = 1 root NetworkObject + n child NetworkObjects
294+
{
295+
if (NetworkLog.CurrentLogLevel <= LogLevel.Normal)
296+
{
297+
NetworkLog.LogWarning($"{nameof(NetworkPrefab)}[{i}] has child {nameof(NetworkObject)}(s) but they will not be spawned across the network (unsupported {nameof(NetworkPrefab)} setup)");
298+
}
299+
}
300+
}
301+
289302
// Default to the standard NetworkPrefab.Prefab's NetworkObject first
290303
var globalObjectIdHash = networkObject.GlobalObjectIdHash;
291304

292305
// Now check to see if it has an override
293-
switch (NetworkConfig.NetworkPrefabs[i].Override)
306+
switch (networkPrefab.Override)
294307
{
295308
case NetworkPrefabOverride.Prefab:
296309
{
297-
if (NetworkConfig.NetworkPrefabs[i].SourcePrefabToOverride == null && NetworkConfig.NetworkPrefabs[i].Prefab != null)
310+
if (networkPrefab.SourcePrefabToOverride == null && networkPrefab.Prefab != null)
298311
{
299-
NetworkConfig.NetworkPrefabs[i].SourcePrefabToOverride = NetworkConfig.NetworkPrefabs[i].Prefab;
312+
networkPrefab.SourcePrefabToOverride = networkPrefab.Prefab;
300313
}
301-
globalObjectIdHash = NetworkConfig.NetworkPrefabs[i].SourcePrefabToOverride.GetComponent<NetworkObject>().GlobalObjectIdHash;
314+
globalObjectIdHash = networkPrefab.SourcePrefabToOverride.GetComponent<NetworkObject>().GlobalObjectIdHash;
302315
}
303316
break;
304317
case NetworkPrefabOverride.Hash:
305-
globalObjectIdHash = NetworkConfig.NetworkPrefabs[i].SourceHashToOverride;
318+
globalObjectIdHash = networkPrefab.SourceHashToOverride;
306319
break;
307320
}
308321

309322
// Add to the NetworkPrefabOverrideLinks or handle a new (blank) entries
310323
if (!NetworkConfig.NetworkPrefabOverrideLinks.ContainsKey(globalObjectIdHash))
311324
{
312-
NetworkConfig.NetworkPrefabOverrideLinks.Add(globalObjectIdHash, NetworkConfig.NetworkPrefabs[i]);
325+
NetworkConfig.NetworkPrefabOverrideLinks.Add(globalObjectIdHash, networkPrefab);
313326
}
314327
else
315328
{
@@ -500,7 +513,7 @@ private void Initialize(bool server)
500513

501514
// Clear out anything that is invalid or not used (for invalid entries we already logged warnings to the user earlier)
502515
// Iterate backwards so indices don't shift as we remove
503-
for (int i = removeEmptyPrefabs.Count-1; i >= 0; i--)
516+
for (int i = removeEmptyPrefabs.Count - 1; i >= 0; i--)
504517
{
505518
NetworkConfig.NetworkPrefabs.RemoveAt(removeEmptyPrefabs[i]);
506519
}

0 commit comments

Comments
 (0)