@@ -274,42 +274,55 @@ private void OnValidate()
274
274
// Check network prefabs and assign to dictionary for quick look up
275
275
for ( int i = 0 ; i < NetworkConfig . NetworkPrefabs . Count ; i ++ )
276
276
{
277
- if ( NetworkConfig . NetworkPrefabs [ i ] != null && NetworkConfig . NetworkPrefabs [ i ] . Prefab != null )
277
+ var networkPrefab = NetworkConfig . NetworkPrefabs [ i ] ;
278
+ if ( networkPrefab != null && networkPrefab . Prefab != null )
278
279
{
279
- var networkObject = NetworkConfig . NetworkPrefabs [ i ] . Prefab . GetComponent < NetworkObject > ( ) ;
280
+ var networkObject = networkPrefab . Prefab . GetComponent < NetworkObject > ( ) ;
280
281
if ( networkObject == null )
281
282
{
282
283
if ( NetworkLog . CurrentLogLevel <= LogLevel . Normal )
283
284
{
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 ") ;
285
286
}
286
287
}
287
288
else
288
289
{
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
+
289
302
// Default to the standard NetworkPrefab.Prefab's NetworkObject first
290
303
var globalObjectIdHash = networkObject . GlobalObjectIdHash ;
291
304
292
305
// Now check to see if it has an override
293
- switch ( NetworkConfig . NetworkPrefabs [ i ] . Override )
306
+ switch ( networkPrefab . Override )
294
307
{
295
308
case NetworkPrefabOverride . Prefab :
296
309
{
297
- if ( NetworkConfig . NetworkPrefabs [ i ] . SourcePrefabToOverride == null && NetworkConfig . NetworkPrefabs [ i ] . Prefab != null )
310
+ if ( networkPrefab . SourcePrefabToOverride == null && networkPrefab . Prefab != null )
298
311
{
299
- NetworkConfig . NetworkPrefabs [ i ] . SourcePrefabToOverride = NetworkConfig . NetworkPrefabs [ i ] . Prefab ;
312
+ networkPrefab . SourcePrefabToOverride = networkPrefab . Prefab ;
300
313
}
301
- globalObjectIdHash = NetworkConfig . NetworkPrefabs [ i ] . SourcePrefabToOverride . GetComponent < NetworkObject > ( ) . GlobalObjectIdHash ;
314
+ globalObjectIdHash = networkPrefab . SourcePrefabToOverride . GetComponent < NetworkObject > ( ) . GlobalObjectIdHash ;
302
315
}
303
316
break ;
304
317
case NetworkPrefabOverride . Hash :
305
- globalObjectIdHash = NetworkConfig . NetworkPrefabs [ i ] . SourceHashToOverride ;
318
+ globalObjectIdHash = networkPrefab . SourceHashToOverride ;
306
319
break ;
307
320
}
308
321
309
322
// Add to the NetworkPrefabOverrideLinks or handle a new (blank) entries
310
323
if ( ! NetworkConfig . NetworkPrefabOverrideLinks . ContainsKey ( globalObjectIdHash ) )
311
324
{
312
- NetworkConfig . NetworkPrefabOverrideLinks . Add ( globalObjectIdHash , NetworkConfig . NetworkPrefabs [ i ] ) ;
325
+ NetworkConfig . NetworkPrefabOverrideLinks . Add ( globalObjectIdHash , networkPrefab ) ;
313
326
}
314
327
else
315
328
{
@@ -500,7 +513,7 @@ private void Initialize(bool server)
500
513
501
514
// Clear out anything that is invalid or not used (for invalid entries we already logged warnings to the user earlier)
502
515
// 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 -- )
504
517
{
505
518
NetworkConfig . NetworkPrefabs . RemoveAt ( removeEmptyPrefabs [ i ] ) ;
506
519
}
0 commit comments