Skip to content

Commit 3b8a47e

Browse files
committed
Merge branch 'sam/feature/interpolation-for-network-transform' of github.com:Unity-Technologies/com.unity.multiplayer.mlapi into sam/feature/interpolation-for-network-transform
* 'sam/feature/interpolation-for-network-transform' of github.com:Unity-Technologies/com.unity.multiplayer.mlapi: test: NetworkTransformStateTests no longer uses ReplNetworkState (#1084) fix: networkmanager prefab validation and no scene management manual test (#1073) feat: snapshot. MTT-1088 Snapshot acknowledgment gaps (#1083) feat: Add a test to validate registration of metric types (#1072) chore!: Remove unsupported UNET Relay behavior (MTT-1000) (#1081) fix: 2+ inheritance from network behaviour causes compilation exception (#1078) (#1079) test: add networkscenemanager additive scene loading tests (#1076)
2 parents 496fa82 + bac5c85 commit 3b8a47e

29 files changed

+1066
-1103
lines changed

com.unity.netcode.gameobjects/Editor/CodeGen/NetworkBehaviourILPP.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -595,8 +595,8 @@ private void ProcessNetworkBehaviour(TypeDefinition typeDefinition, string[] ass
595595

596596
// override NetworkBehaviour.__getTypeName() method to return concrete type
597597
{
598-
var baseType = typeDefinition.BaseType.Resolve();
599-
var baseGetTypeNameMethod = baseType.Methods.First(p => p.Name.Equals(nameof(NetworkBehaviour.__getTypeName)));
598+
var networkBehaviour_TypeDef = m_NetworkBehaviour_TypeRef.Resolve();
599+
var baseGetTypeNameMethod = networkBehaviour_TypeDef.Methods.First(p => p.Name.Equals(nameof(NetworkBehaviour.__getTypeName)));
600600

601601
var newGetTypeNameMethod = new MethodDefinition(
602602
nameof(NetworkBehaviour.__getTypeName),

com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs

Lines changed: 122 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,10 @@ private void Initialize(bool server)
467467
// Build the NetworkPrefabOverrideLinks dictionary
468468
for (int i = 0; i < NetworkConfig.NetworkPrefabs.Count; i++)
469469
{
470-
if (NetworkConfig.NetworkPrefabs[i] == null || NetworkConfig.NetworkPrefabs[i].Prefab == null)
470+
var sourcePrefabGlobalObjectIdHash = (uint)0;
471+
var targetPrefabGlobalObjectIdHash = (uint)0;
472+
var networkObject = (NetworkObject)null;
473+
if (NetworkConfig.NetworkPrefabs[i] == null || (NetworkConfig.NetworkPrefabs[i].Prefab == null && NetworkConfig.NetworkPrefabs[i].Override == NetworkPrefabOverride.None))
471474
{
472475
if (NetworkLog.CurrentLogLevel <= LogLevel.Error)
473476
{
@@ -476,60 +479,144 @@ private void Initialize(bool server)
476479
}
477480

478481
removeEmptyPrefabs.Add(i);
479-
480482
continue;
481483
}
482-
else if (NetworkConfig.NetworkPrefabs[i].Prefab.GetComponent<NetworkObject>() == null)
484+
else if (NetworkConfig.NetworkPrefabs[i].Override == NetworkPrefabOverride.None)
483485
{
484-
if (NetworkLog.CurrentLogLevel <= LogLevel.Error)
486+
networkObject = NetworkConfig.NetworkPrefabs[i].Prefab.GetComponent<NetworkObject>();
487+
if (networkObject == null)
485488
{
486-
NetworkLog.LogWarning(
487-
$"{nameof(NetworkPrefab)} (\"{NetworkConfig.NetworkPrefabs[i].Prefab.name}\") is missing a {nameof(NetworkObject)} component");
489+
if (NetworkLog.CurrentLogLevel <= LogLevel.Error)
490+
{
491+
NetworkLog.LogWarning($"{nameof(NetworkPrefab)} (\"{NetworkConfig.NetworkPrefabs[i].Prefab.name}\") is missing " +
492+
$"a {nameof(NetworkObject)} component (entry will be ignored).");
493+
}
494+
removeEmptyPrefabs.Add(i);
495+
continue;
488496
}
489497

490-
// Provide the name of the prefab with issues so the user can more easily find the prefab and fix it
491-
Debug.LogWarning($"{nameof(NetworkPrefab)} (\"{NetworkConfig.NetworkPrefabs[i].Prefab.name}\") will be removed and ignored.");
492-
removeEmptyPrefabs.Add(i);
493-
494-
continue;
498+
// Otherwise get the GlobalObjectIdHash value
499+
sourcePrefabGlobalObjectIdHash = networkObject.GlobalObjectIdHash;
495500
}
496-
497-
var networkObject = NetworkConfig.NetworkPrefabs[i].Prefab.GetComponent<NetworkObject>();
498-
499-
// Assign the appropriate GlobalObjectIdHash to the appropriate NetworkPrefab
500-
if (!NetworkConfig.NetworkPrefabOverrideLinks.ContainsKey(networkObject.GlobalObjectIdHash))
501+
else // Validate Overrides
501502
{
503+
// Validate source prefab override values first
502504
switch (NetworkConfig.NetworkPrefabs[i].Override)
503505
{
504-
default:
505-
case NetworkPrefabOverride.None:
506-
NetworkConfig.NetworkPrefabOverrideLinks.Add(networkObject.GlobalObjectIdHash,
507-
NetworkConfig.NetworkPrefabs[i]);
508-
break;
509-
case NetworkPrefabOverride.Prefab:
506+
case NetworkPrefabOverride.Hash:
510507
{
511-
var sourcePrefabGlobalObjectIdHash = NetworkConfig.NetworkPrefabs[i].SourcePrefabToOverride.GetComponent<NetworkObject>().GlobalObjectIdHash;
512-
NetworkConfig.NetworkPrefabOverrideLinks.Add(sourcePrefabGlobalObjectIdHash, NetworkConfig.NetworkPrefabs[i]);
513-
514-
var targetPrefabGlobalObjectIdHash = NetworkConfig.NetworkPrefabs[i].OverridingTargetPrefab.GetComponent<NetworkObject>().GlobalObjectIdHash;
515-
NetworkConfig.OverrideToNetworkPrefab.Add(targetPrefabGlobalObjectIdHash, sourcePrefabGlobalObjectIdHash);
508+
if (NetworkConfig.NetworkPrefabs[i].SourceHashToOverride == 0)
509+
{
510+
if (NetworkLog.CurrentLogLevel <= LogLevel.Error)
511+
{
512+
NetworkLog.LogWarning($"{nameof(NetworkPrefab)} {nameof(NetworkPrefab.SourceHashToOverride)} is zero (entry will be ignored).");
513+
}
514+
removeEmptyPrefabs.Add(i);
515+
continue;
516+
}
517+
sourcePrefabGlobalObjectIdHash = NetworkConfig.NetworkPrefabs[i].SourceHashToOverride;
518+
break;
516519
}
517-
break;
518-
case NetworkPrefabOverride.Hash:
520+
case NetworkPrefabOverride.Prefab:
519521
{
520-
var sourcePrefabGlobalObjectIdHash = NetworkConfig.NetworkPrefabs[i].SourceHashToOverride;
521-
NetworkConfig.NetworkPrefabOverrideLinks.Add(sourcePrefabGlobalObjectIdHash, NetworkConfig.NetworkPrefabs[i]);
522+
if (NetworkConfig.NetworkPrefabs[i].SourcePrefabToOverride == null)
523+
{
524+
if (NetworkLog.CurrentLogLevel <= LogLevel.Error)
525+
{
526+
NetworkLog.LogWarning($"{nameof(NetworkPrefab)} {nameof(NetworkPrefab.SourcePrefabToOverride)} is null (entry will be ignored).");
527+
}
528+
Debug.LogWarning($"{nameof(NetworkPrefab)} override entry {NetworkConfig.NetworkPrefabs[i].SourceHashToOverride} will be removed and ignored.");
529+
removeEmptyPrefabs.Add(i);
530+
continue;
531+
}
532+
else
533+
{
534+
networkObject = NetworkConfig.NetworkPrefabs[i].SourcePrefabToOverride.GetComponent<NetworkObject>();
535+
if (networkObject == null)
536+
{
537+
if (NetworkLog.CurrentLogLevel <= LogLevel.Error)
538+
{
539+
NetworkLog.LogWarning($"{nameof(NetworkPrefab)} ({NetworkConfig.NetworkPrefabs[i].SourcePrefabToOverride.name}) " +
540+
$"is missing a {nameof(NetworkObject)} component (entry will be ignored).");
541+
}
542+
Debug.LogWarning($"{nameof(NetworkPrefab)} override entry (\"{NetworkConfig.NetworkPrefabs[i].SourcePrefabToOverride.name}\") will be removed and ignored.");
543+
removeEmptyPrefabs.Add(i);
544+
continue;
545+
}
546+
sourcePrefabGlobalObjectIdHash = networkObject.GlobalObjectIdHash;
547+
}
548+
break;
549+
}
550+
}
522551

523-
var targetPrefabGlobalObjectIdHash = NetworkConfig.NetworkPrefabs[i].OverridingTargetPrefab.GetComponent<NetworkObject>().GlobalObjectIdHash;
524-
NetworkConfig.OverrideToNetworkPrefab.Add(targetPrefabGlobalObjectIdHash, sourcePrefabGlobalObjectIdHash);
552+
// Validate target prefab override values next
553+
if (NetworkConfig.NetworkPrefabs[i].OverridingTargetPrefab == null)
554+
{
555+
if (NetworkLog.CurrentLogLevel <= LogLevel.Error)
556+
{
557+
NetworkLog.LogWarning($"{nameof(NetworkPrefab)} {nameof(NetworkPrefab.OverridingTargetPrefab)} is null!");
558+
}
559+
removeEmptyPrefabs.Add(i);
560+
switch (NetworkConfig.NetworkPrefabs[i].Override)
561+
{
562+
case NetworkPrefabOverride.Hash:
563+
{
564+
Debug.LogWarning($"{nameof(NetworkPrefab)} override entry {NetworkConfig.NetworkPrefabs[i].SourceHashToOverride} will be removed and ignored.");
565+
break;
566+
}
567+
case NetworkPrefabOverride.Prefab:
568+
{
569+
Debug.LogWarning($"{nameof(NetworkPrefab)} override entry ({NetworkConfig.NetworkPrefabs[i].SourcePrefabToOverride.name}) will be removed and ignored.");
570+
break;
571+
}
572+
}
573+
continue;
574+
}
575+
else
576+
{
577+
targetPrefabGlobalObjectIdHash = NetworkConfig.NetworkPrefabs[i].OverridingTargetPrefab.GetComponent<NetworkObject>().GlobalObjectIdHash;
578+
}
579+
}
580+
581+
// Assign the appropriate GlobalObjectIdHash to the appropriate NetworkPrefab
582+
if (!NetworkConfig.NetworkPrefabOverrideLinks.ContainsKey(sourcePrefabGlobalObjectIdHash))
583+
{
584+
if (NetworkConfig.NetworkPrefabs[i].Override == NetworkPrefabOverride.None)
585+
{
586+
NetworkConfig.NetworkPrefabOverrideLinks.Add(sourcePrefabGlobalObjectIdHash, NetworkConfig.NetworkPrefabs[i]);
587+
}
588+
else
589+
{
590+
if (!NetworkConfig.OverrideToNetworkPrefab.ContainsKey(targetPrefabGlobalObjectIdHash))
591+
{
592+
switch (NetworkConfig.NetworkPrefabs[i].Override)
593+
{
594+
case NetworkPrefabOverride.Prefab:
595+
{
596+
NetworkConfig.NetworkPrefabOverrideLinks.Add(sourcePrefabGlobalObjectIdHash, NetworkConfig.NetworkPrefabs[i]);
597+
NetworkConfig.OverrideToNetworkPrefab.Add(targetPrefabGlobalObjectIdHash, sourcePrefabGlobalObjectIdHash);
598+
}
599+
break;
600+
case NetworkPrefabOverride.Hash:
601+
{
602+
NetworkConfig.NetworkPrefabOverrideLinks.Add(sourcePrefabGlobalObjectIdHash, NetworkConfig.NetworkPrefabs[i]);
603+
NetworkConfig.OverrideToNetworkPrefab.Add(targetPrefabGlobalObjectIdHash, sourcePrefabGlobalObjectIdHash);
604+
}
605+
break;
525606
}
526-
break;
607+
}
608+
else
609+
{
610+
// This can happen if a user tries to make several GlobalObjectIdHash values point to the same target
611+
Debug.LogError($"{nameof(NetworkPrefab)} (\"{networkObject.name}\") has a duplicate {nameof(NetworkObject.GlobalObjectIdHash)} target entry value of: {targetPrefabGlobalObjectIdHash}! Removing entry from list!");
612+
removeEmptyPrefabs.Add(i);
613+
}
527614
}
528615
}
529616
else
530617
{
531618
// This should never happen, but in the case it somehow does log an error and remove the duplicate entry
532-
Debug.LogError($"{nameof(NetworkPrefab)} (\"{NetworkConfig.NetworkPrefabs[i].Prefab.name}\") has a duplicate {nameof(NetworkObject.GlobalObjectIdHash)} {networkObject.GlobalObjectIdHash} entry! Removing entry from list!");
619+
Debug.LogError($"{nameof(NetworkPrefab)} ({networkObject.name}) has a duplicate {nameof(NetworkObject.GlobalObjectIdHash)} source entry value of: {sourcePrefabGlobalObjectIdHash}! Removing entry from list!");
533620
removeEmptyPrefabs.Add(i);
534621
}
535622
}

0 commit comments

Comments
 (0)