From 5a326639c5df99e613ac32a277382ab2fc817db6 Mon Sep 17 00:00:00 2001 From: NoelStephensUnity <73188597+NoelStephensUnity@users.noreply.github.com> Date: Thu, 19 Aug 2021 19:07:16 -0500 Subject: [PATCH 01/11] fix This fixes issues with NetworkManager prefab override validation. If you never assigned a Prefab but just wanted to override it would fail. It never properly checked all potential cases, which this fixes. --- .../Runtime/Core/NetworkManager.cs | 158 ++++++++++++++---- 1 file changed, 123 insertions(+), 35 deletions(-) diff --git a/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs b/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs index 298de3a51c..8d279487b2 100644 --- a/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs +++ b/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs @@ -471,7 +471,10 @@ private void Initialize(bool server) // Build the NetworkPrefabOverrideLinks dictionary for (int i = 0; i < NetworkConfig.NetworkPrefabs.Count; i++) { - if (NetworkConfig.NetworkPrefabs[i] == null || NetworkConfig.NetworkPrefabs[i].Prefab == null) + var sourcePrefabGlobalObjectIdHash = (uint)0; + var targetPrefabGlobalObjectIdHash = (uint)0; + var networkObject = (NetworkObject)null; + if ((NetworkConfig.NetworkPrefabs[i] == null || NetworkConfig.NetworkPrefabs[i].Prefab == null) && NetworkConfig.NetworkPrefabs[i].Override == NetworkPrefabOverride.None) { if (NetworkLog.CurrentLogLevel <= LogLevel.Error) { @@ -480,60 +483,145 @@ private void Initialize(bool server) } removeEmptyPrefabs.Add(i); - continue; } - else if (NetworkConfig.NetworkPrefabs[i].Prefab.GetComponent() == null) + else + if (NetworkConfig.NetworkPrefabs[i].Override == NetworkPrefabOverride.None) { - if (NetworkLog.CurrentLogLevel <= LogLevel.Error) + networkObject = NetworkConfig.NetworkPrefabs[i].Prefab.GetComponent(); + if (networkObject == null) { - NetworkLog.LogWarning( - $"{nameof(NetworkPrefab)} (\"{NetworkConfig.NetworkPrefabs[i].Prefab.name}\") is missing a {nameof(NetworkObject)} component"); + if (NetworkLog.CurrentLogLevel <= LogLevel.Error) + { + NetworkLog.LogWarning($"{nameof(NetworkPrefab)} (\"{NetworkConfig.NetworkPrefabs[i].Prefab.name}\") is missing " + + $"a {nameof(NetworkObject)} component (entry will be ignored)."); + } + removeEmptyPrefabs.Add(i); + continue; } - // Provide the name of the prefab with issues so the user can more easily find the prefab and fix it - Debug.LogWarning($"{nameof(NetworkPrefab)} (\"{NetworkConfig.NetworkPrefabs[i].Prefab.name}\") will be removed and ignored."); - removeEmptyPrefabs.Add(i); - - continue; + // Otherwise get the GlobalObjectIdHash value + sourcePrefabGlobalObjectIdHash = networkObject.GlobalObjectIdHash; } - - var networkObject = NetworkConfig.NetworkPrefabs[i].Prefab.GetComponent(); - - // Assign the appropriate GlobalObjectIdHash to the appropriate NetworkPrefab - if (!NetworkConfig.NetworkPrefabOverrideLinks.ContainsKey(networkObject.GlobalObjectIdHash)) + else // Validate Overrides { + // Validate source prefab override values first switch (NetworkConfig.NetworkPrefabs[i].Override) { - default: - case NetworkPrefabOverride.None: - NetworkConfig.NetworkPrefabOverrideLinks.Add(networkObject.GlobalObjectIdHash, - NetworkConfig.NetworkPrefabs[i]); - break; - case NetworkPrefabOverride.Prefab: + case NetworkPrefabOverride.Hash: { - var sourcePrefabGlobalObjectIdHash = NetworkConfig.NetworkPrefabs[i].SourcePrefabToOverride.GetComponent().GlobalObjectIdHash; - NetworkConfig.NetworkPrefabOverrideLinks.Add(sourcePrefabGlobalObjectIdHash, NetworkConfig.NetworkPrefabs[i]); - - var targetPrefabGlobalObjectIdHash = NetworkConfig.NetworkPrefabs[i].OverridingTargetPrefab.GetComponent().GlobalObjectIdHash; - NetworkConfig.OverrideToNetworkPrefab.Add(targetPrefabGlobalObjectIdHash, sourcePrefabGlobalObjectIdHash); + if (NetworkConfig.NetworkPrefabs[i].SourceHashToOverride == 0) + { + if (NetworkLog.CurrentLogLevel <= LogLevel.Error) + { + NetworkLog.LogWarning($"{nameof(NetworkPrefab)} {nameof(NetworkPrefab.SourceHashToOverride)} is zero (entry will be ignored)."); + } + removeEmptyPrefabs.Add(i); + continue; + } + sourcePrefabGlobalObjectIdHash = NetworkConfig.NetworkPrefabs[i].SourceHashToOverride; + break; } - break; - case NetworkPrefabOverride.Hash: + case NetworkPrefabOverride.Prefab: { - var sourcePrefabGlobalObjectIdHash = NetworkConfig.NetworkPrefabs[i].SourceHashToOverride; - NetworkConfig.NetworkPrefabOverrideLinks.Add(sourcePrefabGlobalObjectIdHash, NetworkConfig.NetworkPrefabs[i]); + if (NetworkConfig.NetworkPrefabs[i].SourcePrefabToOverride == null) + { + if (NetworkLog.CurrentLogLevel <= LogLevel.Error) + { + NetworkLog.LogWarning($"{nameof(NetworkPrefab)} {nameof(NetworkPrefab.SourcePrefabToOverride)} is null (entry will be ignored)."); + } + Debug.LogWarning($"{nameof(NetworkPrefab)} override entry {NetworkConfig.NetworkPrefabs[i].SourceHashToOverride} will be removed and ignored."); + removeEmptyPrefabs.Add(i); + continue; + } + else + { + networkObject = NetworkConfig.NetworkPrefabs[i].SourcePrefabToOverride.GetComponent(); + if (networkObject == null) + { + if (NetworkLog.CurrentLogLevel <= LogLevel.Error) + { + NetworkLog.LogWarning($"{nameof(NetworkPrefab)} (\"{NetworkConfig.NetworkPrefabs[i].SourcePrefabToOverride.name}\") " + + $"is missing a {nameof(NetworkObject)} component (entry will be ignored)."); + } + Debug.LogWarning($"{nameof(NetworkPrefab)} override entry (\"{NetworkConfig.NetworkPrefabs[i].SourcePrefabToOverride.name}\") will be removed and ignored."); + removeEmptyPrefabs.Add(i); + continue; + } + sourcePrefabGlobalObjectIdHash = networkObject.GlobalObjectIdHash; + } + break; + } + } + + // Validate target prefab override values next + if (NetworkConfig.NetworkPrefabs[i].OverridingTargetPrefab == null) + { + if (NetworkLog.CurrentLogLevel <= LogLevel.Error) + { + NetworkLog.LogWarning($"{nameof(NetworkPrefab)} {nameof(NetworkPrefab.OverridingTargetPrefab)} is null!"); + } + removeEmptyPrefabs.Add(i); + switch (NetworkConfig.NetworkPrefabs[i].Override) + { + case NetworkPrefabOverride.Hash: + { + Debug.LogWarning($"{nameof(NetworkPrefab)} override entry {NetworkConfig.NetworkPrefabs[i].SourceHashToOverride} will be removed and ignored."); + break; + } + case NetworkPrefabOverride.Prefab: + { + Debug.LogWarning($"{nameof(NetworkPrefab)} override entry (\"{NetworkConfig.NetworkPrefabs[i].SourcePrefabToOverride.name}\") will be removed and ignored."); + break; + } + } + continue; + } + else + { + targetPrefabGlobalObjectIdHash = NetworkConfig.NetworkPrefabs[i].OverridingTargetPrefab.GetComponent().GlobalObjectIdHash; + } + } - var targetPrefabGlobalObjectIdHash = NetworkConfig.NetworkPrefabs[i].OverridingTargetPrefab.GetComponent().GlobalObjectIdHash; - NetworkConfig.OverrideToNetworkPrefab.Add(targetPrefabGlobalObjectIdHash, sourcePrefabGlobalObjectIdHash); + // Assign the appropriate GlobalObjectIdHash to the appropriate NetworkPrefab + if (!NetworkConfig.NetworkPrefabOverrideLinks.ContainsKey(sourcePrefabGlobalObjectIdHash)) + { + if (NetworkConfig.NetworkPrefabs[i].Override == NetworkPrefabOverride.None) + { + NetworkConfig.NetworkPrefabOverrideLinks.Add(sourcePrefabGlobalObjectIdHash, NetworkConfig.NetworkPrefabs[i]); + } + else + { + if (!NetworkConfig.OverrideToNetworkPrefab.ContainsKey(targetPrefabGlobalObjectIdHash)) + { + switch (NetworkConfig.NetworkPrefabs[i].Override) + { + case NetworkPrefabOverride.Prefab: + { + NetworkConfig.NetworkPrefabOverrideLinks.Add(sourcePrefabGlobalObjectIdHash, NetworkConfig.NetworkPrefabs[i]); + NetworkConfig.OverrideToNetworkPrefab.Add(targetPrefabGlobalObjectIdHash, sourcePrefabGlobalObjectIdHash); + } + break; + case NetworkPrefabOverride.Hash: + { + NetworkConfig.NetworkPrefabOverrideLinks.Add(sourcePrefabGlobalObjectIdHash, NetworkConfig.NetworkPrefabs[i]); + NetworkConfig.OverrideToNetworkPrefab.Add(targetPrefabGlobalObjectIdHash, sourcePrefabGlobalObjectIdHash); + } + break; } - break; + } + else + { + // This can happen if a user tries to make several GlobalObjectIdHash values point to the same target + Debug.LogError($"{nameof(NetworkPrefab)} (\"{networkObject.name}\") has a duplicate {nameof(NetworkObject.GlobalObjectIdHash)} target entry value of: {targetPrefabGlobalObjectIdHash}! Removing entry from list!"); + removeEmptyPrefabs.Add(i); + } } } else { // This should never happen, but in the case it somehow does log an error and remove the duplicate entry - Debug.LogError($"{nameof(NetworkPrefab)} (\"{NetworkConfig.NetworkPrefabs[i].Prefab.name}\") has a duplicate {nameof(NetworkObject.GlobalObjectIdHash)} {networkObject.GlobalObjectIdHash} entry! Removing entry from list!"); + Debug.LogError($"{nameof(NetworkPrefab)} (\"{networkObject.name}\") has a duplicate {nameof(NetworkObject.GlobalObjectIdHash)} source entry value of: {sourcePrefabGlobalObjectIdHash}! Removing entry from list!"); removeEmptyPrefabs.Add(i); } } From 35f4ffd642e53d4b9ef6ae7b6309df538d3e064b Mon Sep 17 00:00:00 2001 From: NoelStephensUnity <73188597+NoelStephensUnity@users.noreply.github.com> Date: Thu, 19 Aug 2021 19:08:02 -0500 Subject: [PATCH 02/11] test This validates the fixes as well as tests that disabling original/legacy scene management works. --- ...tToOverride-VariantShinyBlueCapsule.prefab | 91 +++++++++++++ ...erride-VariantShinyBlueCapsule.prefab.meta | 7 + .../Assets/Prefabs/PrefabPoolCapsule.prefab | 66 ++++++++++ .../Prefabs/PrefabPoolCapsule.prefab.meta | 7 + .../EnableDisableSceneNetworkObject.unity | 120 +++++++++++++++++- ...nableDisableSceneNetworkObjectComponent.cs | 39 ++++-- .../MyMeshNetworkObject.prefab | 13 +- .../NetworkPrefabHandlerObjectPool.cs | 8 ++ 8 files changed, 328 insertions(+), 23 deletions(-) create mode 100644 testproject/Assets/Prefabs/ObjectToOverride-VariantShinyBlueCapsule.prefab create mode 100644 testproject/Assets/Prefabs/ObjectToOverride-VariantShinyBlueCapsule.prefab.meta create mode 100644 testproject/Assets/Prefabs/PrefabPoolCapsule.prefab create mode 100644 testproject/Assets/Prefabs/PrefabPoolCapsule.prefab.meta diff --git a/testproject/Assets/Prefabs/ObjectToOverride-VariantShinyBlueCapsule.prefab b/testproject/Assets/Prefabs/ObjectToOverride-VariantShinyBlueCapsule.prefab new file mode 100644 index 0000000000..aeadc1f575 --- /dev/null +++ b/testproject/Assets/Prefabs/ObjectToOverride-VariantShinyBlueCapsule.prefab @@ -0,0 +1,91 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &280257649504156795 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: -5591000292386890817, guid: 29cabf623d47bb345a9bb4140e4397d7, + type: 3} + propertyPath: GlobalObjectIdHash + value: 951099334 + objectReference: {fileID: 0} + - target: {fileID: 771575417923360811, guid: 29cabf623d47bb345a9bb4140e4397d7, + type: 3} + propertyPath: m_Name + value: ObjectToOverride-VariantShinyBlueCapsule + objectReference: {fileID: 0} + - target: {fileID: 771575417923360817, guid: 29cabf623d47bb345a9bb4140e4397d7, + type: 3} + propertyPath: m_Mesh + value: + objectReference: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} + - target: {fileID: 771575417923360819, guid: 29cabf623d47bb345a9bb4140e4397d7, + type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 5d9678afcf333564dab383a5db660ae3, type: 2} + - target: {fileID: 771575417923360822, guid: 29cabf623d47bb345a9bb4140e4397d7, + type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 771575417923360822, guid: 29cabf623d47bb345a9bb4140e4397d7, + type: 3} + propertyPath: m_LocalScale.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 771575417923360822, guid: 29cabf623d47bb345a9bb4140e4397d7, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 771575417923360822, guid: 29cabf623d47bb345a9bb4140e4397d7, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 771575417923360822, guid: 29cabf623d47bb345a9bb4140e4397d7, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 771575417923360822, guid: 29cabf623d47bb345a9bb4140e4397d7, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 771575417923360822, guid: 29cabf623d47bb345a9bb4140e4397d7, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 771575417923360822, guid: 29cabf623d47bb345a9bb4140e4397d7, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 771575417923360822, guid: 29cabf623d47bb345a9bb4140e4397d7, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 771575417923360822, guid: 29cabf623d47bb345a9bb4140e4397d7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 771575417923360822, guid: 29cabf623d47bb345a9bb4140e4397d7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 771575417923360822, guid: 29cabf623d47bb345a9bb4140e4397d7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 29cabf623d47bb345a9bb4140e4397d7, type: 3} diff --git a/testproject/Assets/Prefabs/ObjectToOverride-VariantShinyBlueCapsule.prefab.meta b/testproject/Assets/Prefabs/ObjectToOverride-VariantShinyBlueCapsule.prefab.meta new file mode 100644 index 0000000000..81f202f1c7 --- /dev/null +++ b/testproject/Assets/Prefabs/ObjectToOverride-VariantShinyBlueCapsule.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 23a6a208dc8f7b946a001fbfe1968aa9 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/testproject/Assets/Prefabs/PrefabPoolCapsule.prefab b/testproject/Assets/Prefabs/PrefabPoolCapsule.prefab new file mode 100644 index 0000000000..8e0c666bbc --- /dev/null +++ b/testproject/Assets/Prefabs/PrefabPoolCapsule.prefab @@ -0,0 +1,66 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &9135756850134264021 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9135756850134264011} + - component: {fileID: 9135756850134264010} + - component: {fileID: 9135756850134264020} + m_Layer: 0 + m_Name: PrefabPoolCapsule + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &9135756850134264011 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9135756850134264021} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &9135756850134264010 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9135756850134264021} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3} + m_Name: + m_EditorClassIdentifier: + GlobalObjectIdHash: 951099334 + AlwaysReplicateAsRoot: 0 + DontDestroyWithOwner: 0 + AutoObjectParentSync: 1 +--- !u!114 &9135756850134264020 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9135756850134264021} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83e085235981b734bad565d9a60de47a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ObjectToPool: {fileID: 6137946741893414299, guid: d2bccc96d1636264fa43b546a1b617c3, + type: 3} + m_ObjectPoolSize: 15 + m_SpawnsPerSecond: 2 diff --git a/testproject/Assets/Prefabs/PrefabPoolCapsule.prefab.meta b/testproject/Assets/Prefabs/PrefabPoolCapsule.prefab.meta new file mode 100644 index 0000000000..4d5d3c4141 --- /dev/null +++ b/testproject/Assets/Prefabs/PrefabPoolCapsule.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b3b9c4132e5721b4baa05aab08b1a0ab +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/testproject/Assets/Samples/EnableDisableNetworkObject/EnableDisableSceneNetworkObject.unity b/testproject/Assets/Samples/EnableDisableNetworkObject/EnableDisableSceneNetworkObject.unity index b6f45491da..d278796252 100644 --- a/testproject/Assets/Samples/EnableDisableNetworkObject/EnableDisableSceneNetworkObject.unity +++ b/testproject/Assets/Samples/EnableDisableNetworkObject/EnableDisableSceneNetworkObject.unity @@ -38,7 +38,7 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.44657874, g: 0.49641275, b: 0.5748172, a: 1} + m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: @@ -631,6 +631,7 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -726,6 +727,7 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -821,6 +823,7 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -1154,6 +1157,86 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 29.646, y: 0, z: 0} +--- !u!1001 &1149956384 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 9135756850134264010, guid: b3b9c4132e5721b4baa05aab08b1a0ab, + type: 3} + propertyPath: GlobalObjectIdHash + value: 637189631 + objectReference: {fileID: 0} + - target: {fileID: 9135756850134264011, guid: b3b9c4132e5721b4baa05aab08b1a0ab, + type: 3} + propertyPath: m_RootOrder + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 9135756850134264011, guid: b3b9c4132e5721b4baa05aab08b1a0ab, + type: 3} + propertyPath: m_LocalPosition.x + value: -18.2 + objectReference: {fileID: 0} + - target: {fileID: 9135756850134264011, guid: b3b9c4132e5721b4baa05aab08b1a0ab, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.87 + objectReference: {fileID: 0} + - target: {fileID: 9135756850134264011, guid: b3b9c4132e5721b4baa05aab08b1a0ab, + type: 3} + propertyPath: m_LocalPosition.z + value: -0.1 + objectReference: {fileID: 0} + - target: {fileID: 9135756850134264011, guid: b3b9c4132e5721b4baa05aab08b1a0ab, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 9135756850134264011, guid: b3b9c4132e5721b4baa05aab08b1a0ab, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9135756850134264011, guid: b3b9c4132e5721b4baa05aab08b1a0ab, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9135756850134264011, guid: b3b9c4132e5721b4baa05aab08b1a0ab, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9135756850134264011, guid: b3b9c4132e5721b4baa05aab08b1a0ab, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9135756850134264011, guid: b3b9c4132e5721b4baa05aab08b1a0ab, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9135756850134264011, guid: b3b9c4132e5721b4baa05aab08b1a0ab, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9135756850134264020, guid: b3b9c4132e5721b4baa05aab08b1a0ab, + type: 3} + propertyPath: m_ObjectToPool + value: + objectReference: {fileID: 672869341006996560, guid: 23a6a208dc8f7b946a001fbfe1968aa9, + type: 3} + - target: {fileID: 9135756850134264021, guid: b3b9c4132e5721b4baa05aab08b1a0ab, + type: 3} + propertyPath: m_Name + value: PrefabPoolCapsule + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: b3b9c4132e5721b4baa05aab08b1a0ab, type: 3} --- !u!1001 &1261499201 PrefabInstance: m_ObjectHideFlags: 0 @@ -1234,13 +1317,18 @@ PrefabInstance: - target: {fileID: 3738766586356797253, guid: f65b5e9dbbff79149a4a7d52e7da2565, type: 3} propertyPath: m_Enabled - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 5085754885400786750, guid: f65b5e9dbbff79149a4a7d52e7da2565, type: 3} propertyPath: m_Name value: MyMeshNetworkObject objectReference: {fileID: 0} + - target: {fileID: 5085754885400786750, guid: f65b5e9dbbff79149a4a7d52e7da2565, + type: 3} + propertyPath: m_TagString + value: Boundary + objectReference: {fileID: 0} - target: {fileID: 7830709326079877768, guid: f65b5e9dbbff79149a4a7d52e7da2565, type: 3} propertyPath: m_ActivateObjectButton @@ -1249,7 +1337,7 @@ PrefabInstance: - target: {fileID: 7914308651485899481, guid: f65b5e9dbbff79149a4a7d52e7da2565, type: 3} propertyPath: m_Enabled - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 7914308651485899481, guid: f65b5e9dbbff79149a4a7d52e7da2565, type: 3} @@ -1320,6 +1408,7 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -1435,7 +1524,25 @@ MonoBehaviour: AllowRuntimeSceneChanges: 0 PlayerPrefab: {fileID: 4079352819444256614, guid: c16f03336b6104576a565ef79ad643c0, type: 3} - NetworkPrefabs: [] + NetworkPrefabs: + - Override: 0 + Prefab: {fileID: 672869341006996560, guid: 23a6a208dc8f7b946a001fbfe1968aa9, + type: 3} + SourcePrefabToOverride: {fileID: 0} + SourceHashToOverride: 0 + OverridingTargetPrefab: {fileID: 0} + - Override: 2 + Prefab: {fileID: 0} + SourcePrefabToOverride: {fileID: 0} + SourceHashToOverride: 1187012931 + OverridingTargetPrefab: {fileID: 5085754885400786750, guid: f65b5e9dbbff79149a4a7d52e7da2565, + type: 3} + - Override: 2 + Prefab: {fileID: 0} + SourcePrefabToOverride: {fileID: 0} + SourceHashToOverride: 637189631 + OverridingTargetPrefab: {fileID: 9135756850134264021, guid: b3b9c4132e5721b4baa05aab08b1a0ab, + type: 3} TickRate: 30 ClientConnectionBufferTimeout: 10 ConnectionApproval: 0 @@ -1444,7 +1551,7 @@ MonoBehaviour: TimeResyncInterval: 30 EnableNetworkVariable: 1 EnsureNetworkVariableLengthSafety: 0 - EnableSceneManagement: 1 + EnableSceneManagement: 0 ForceSamePrefabs: 1 RecycleNetworkIds: 1 NetworkIdRecycleDelay: 120 @@ -1485,7 +1592,7 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1706952614} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalPosition: {x: 15.8, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} @@ -1614,6 +1721,7 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 diff --git a/testproject/Assets/Samples/EnableDisableNetworkObject/EnableDisableSceneNetworkObjectComponent.cs b/testproject/Assets/Samples/EnableDisableNetworkObject/EnableDisableSceneNetworkObjectComponent.cs index 9e96de0a12..7260c3b3e2 100644 --- a/testproject/Assets/Samples/EnableDisableNetworkObject/EnableDisableSceneNetworkObjectComponent.cs +++ b/testproject/Assets/Samples/EnableDisableNetworkObject/EnableDisableSceneNetworkObjectComponent.cs @@ -13,35 +13,40 @@ public class EnableDisableSceneNetworkObjectComponent : NetworkBehaviour [SerializeField] private Button m_ActivateObjectButton; - private bool m_CurrentActiveState; + private Text m_ButtonText; + private bool m_CurrentActiveState = true; private void Start() { - //For this example, hide the button until NetworkStart is invoked. - if (m_ActivateObjectButton) + if(m_ActivateObjectButton != null) { + m_ButtonText = m_ActivateObjectButton.GetComponentInChildren(); + if (m_ButtonText != null) + { + m_ButtonText.text = "Hide"; + } + m_ActivateObjectButton.gameObject.SetActive(false); } } public override void OnNetworkSpawn() { - //For this example, the server controls whether the mesh is visible and can collide or not - if (IsServer && IsHost) + if (IsServer) { - if (m_ActivateObjectButton) - { - m_ActivateObjectButton.gameObject.SetActive(true); - } + m_ActivateObjectButton.gameObject.SetActive(true); } base.OnNetworkSpawn(); } public void ButtonActivateToggle() { - m_CurrentActiveState = !m_CurrentActiveState; - StartActivation(m_CurrentActiveState); + if (NetworkManager != null && NetworkManager.IsListening && IsServer) + { + m_CurrentActiveState = !m_CurrentActiveState; + StartActivation(m_CurrentActiveState); + } } public void StartActivation(bool isActive) @@ -64,6 +69,18 @@ private void Activate(bool isActive) { m_MyBoxCollider.enabled = isActive; } + + if (m_ButtonText != null) + { + if (isActive) + { + m_ButtonText.text = "Hide"; + } + else + { + m_ButtonText.text = "Show"; + } + } } diff --git a/testproject/Assets/Samples/EnableDisableNetworkObject/MyMeshNetworkObject.prefab b/testproject/Assets/Samples/EnableDisableNetworkObject/MyMeshNetworkObject.prefab index 2d9a200117..514f8a598f 100644 --- a/testproject/Assets/Samples/EnableDisableNetworkObject/MyMeshNetworkObject.prefab +++ b/testproject/Assets/Samples/EnableDisableNetworkObject/MyMeshNetworkObject.prefab @@ -16,7 +16,7 @@ GameObject: - component: {fileID: 3738766586356797253} m_Layer: 0 m_Name: MyMeshNetworkObject - m_TagString: Untagged + m_TagString: Boundary m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 @@ -29,8 +29,8 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 5085754885400786750} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalPosition: {x: 0, y: 2.5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 60} m_Children: [] m_Father: {fileID: 0} m_RootOrder: 0 @@ -50,6 +50,7 @@ MonoBehaviour: GlobalObjectIdHash: 951099334 AlwaysReplicateAsRoot: 0 DontDestroyWithOwner: 0 + AutoObjectParentSync: 1 --- !u!114 &7830709326079877768 MonoBehaviour: m_ObjectHideFlags: 0 @@ -80,7 +81,7 @@ MeshRenderer: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 5085754885400786750} - m_Enabled: 0 + m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 @@ -93,7 +94,7 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 2100000, guid: 32cd9a9855dc14afc8e589dabe98a40b, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -124,7 +125,7 @@ BoxCollider: m_GameObject: {fileID: 5085754885400786750} m_Material: {fileID: 0} m_IsTrigger: 0 - m_Enabled: 0 + m_Enabled: 1 serializedVersion: 2 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} diff --git a/testproject/Assets/Samples/PrefabPool/NetworkPrefabHandlerObjectPool.cs b/testproject/Assets/Samples/PrefabPool/NetworkPrefabHandlerObjectPool.cs index af69232035..c3e9b15eb7 100644 --- a/testproject/Assets/Samples/PrefabPool/NetworkPrefabHandlerObjectPool.cs +++ b/testproject/Assets/Samples/PrefabPool/NetworkPrefabHandlerObjectPool.cs @@ -76,6 +76,14 @@ public NetworkObject Instantiate(ulong ownerClientId, Vector3 position, Quaterni return gameObject.GetComponent(); } + private void OnDisable() + { + if (NetworkManager && NetworkManager.PrefabHandler != null) + { + NetworkManager.PrefabHandler.RemoveHandler(m_ObjectToPool); + } + } + public void Destroy(NetworkObject networkObject) { if (m_ObjectsPool.Contains(networkObject.gameObject)) From 0edd9108ea71375bdafd8c338c61daa3041a887f Mon Sep 17 00:00:00 2001 From: NoelStephensUnity <73188597+NoelStephensUnity@users.noreply.github.com> Date: Thu, 19 Aug 2021 19:58:44 -0500 Subject: [PATCH 03/11] fix Fixing issue with the wrong brackets around the wrong pair of initial checks for NetworkPrefab validation. Updated the NetworkPrefabHandlerTests to account for all potential scenarios that should be handled without causing initialization to fail. --- .../Runtime/Core/NetworkManager.cs | 2 +- .../Runtime/NetworkPrefabHandlerTests.cs | 42 +++++++++++++++---- 2 files changed, 35 insertions(+), 9 deletions(-) diff --git a/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs b/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs index 8d279487b2..7dfb6e8dd5 100644 --- a/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs +++ b/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs @@ -474,7 +474,7 @@ private void Initialize(bool server) var sourcePrefabGlobalObjectIdHash = (uint)0; var targetPrefabGlobalObjectIdHash = (uint)0; var networkObject = (NetworkObject)null; - if ((NetworkConfig.NetworkPrefabs[i] == null || NetworkConfig.NetworkPrefabs[i].Prefab == null) && NetworkConfig.NetworkPrefabs[i].Override == NetworkPrefabOverride.None) + if (NetworkConfig.NetworkPrefabs[i] == null || (NetworkConfig.NetworkPrefabs[i].Prefab == null && NetworkConfig.NetworkPrefabs[i].Override == NetworkPrefabOverride.None)) { if (NetworkLog.CurrentLogLevel <= LogLevel.Error) { diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkPrefabHandlerTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkPrefabHandlerTests.cs index 0b8ab55ee3..0e4802b658 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkPrefabHandlerTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkPrefabHandlerTests.cs @@ -14,15 +14,25 @@ namespace Unity.Netcode.RuntimeTests /// public class NetworkPrefabHandlerTests { + + private const string k_TestPrefabObjectName = "NetworkPrefaTestObject"; + private uint m_GlobalObjectIdHashBase = 123456; + private GameObject MakeValidNetworkPrefab() + { + Guid baseObjectID = NetworkManagerHelper.AddGameNetworkObject(k_TestPrefabObjectName + m_GlobalObjectIdHashBase.ToString()); + NetworkObject validPrefab = NetworkManagerHelper.InstantiatedNetworkObjects[baseObjectID]; + MultiInstanceHelpers.MakeNetworkedObjectTestPrefab(validPrefab, m_GlobalObjectIdHashBase); + m_GlobalObjectIdHashBase++; + return validPrefab.gameObject; + } + /// - /// Tests the NetwokConfig NetworkPrefabs initialization during NetworkManager's Init method + /// Tests the NetwokConfig NetworkPrefabs initialization during NetworkManager's Init method to make sure that + /// it will still initialize but remove the invalid prefabs /// [Test] public void NetworkConfigInvalidNetworkPrefabTest() { - var testPrefabObjectName = "NetworkPrefabHandlerTestObject"; - Guid baseObjectID = NetworkManagerHelper.AddGameNetworkObject(testPrefabObjectName); - NetworkObject baseObject = NetworkManagerHelper.InstantiatedNetworkObjects[baseObjectID]; // Add null entry NetworkManagerHelper.NetworkManagerObject.NetworkConfig.NetworkPrefabs.Add(null); @@ -30,11 +40,24 @@ public void NetworkConfigInvalidNetworkPrefabTest() // Add a NetworkPrefab with no prefab NetworkManagerHelper.NetworkManagerObject.NetworkConfig.NetworkPrefabs.Add(new NetworkPrefab()); - var validNetworkPrefab = new NetworkPrefab(); - validNetworkPrefab.Prefab = baseObject.gameObject; + // Add a NetworkPrefab override with an invalid hash + NetworkManagerHelper.NetworkManagerObject.NetworkConfig.NetworkPrefabs.Add(new NetworkPrefab() { Override = NetworkPrefabOverride.Hash, SourceHashToOverride = 0 }); + + // Add a NetworkPrefab override with an invalid source prefab to override + NetworkManagerHelper.NetworkManagerObject.NetworkConfig.NetworkPrefabs.Add(new NetworkPrefab() { Override = NetworkPrefabOverride.Prefab, SourcePrefabToOverride = null }); + + // Add a NetworkPrefab override with a valid source prefab to override but an invalid target prefab + NetworkManagerHelper.NetworkManagerObject.NetworkConfig.NetworkPrefabs.Add(new NetworkPrefab() { Override = NetworkPrefabOverride.Prefab, SourcePrefabToOverride = MakeValidNetworkPrefab(), OverridingTargetPrefab = null }); + + // Add a valid prefab + NetworkManagerHelper.NetworkManagerObject.NetworkConfig.NetworkPrefabs.Add(new NetworkPrefab() { Prefab = MakeValidNetworkPrefab() }); + + // Add a NetworkPrefab override with a valid hash and valid target + NetworkManagerHelper.NetworkManagerObject.NetworkConfig.NetworkPrefabs.Add(new NetworkPrefab() { Override = NetworkPrefabOverride.Hash, SourceHashToOverride = 11111111, OverridingTargetPrefab = MakeValidNetworkPrefab() }); + + // Add a NetworkPrefab override with a valid hash and valid target + NetworkManagerHelper.NetworkManagerObject.NetworkConfig.NetworkPrefabs.Add(new NetworkPrefab() { Override = NetworkPrefabOverride.Prefab, SourcePrefabToOverride = MakeValidNetworkPrefab(), OverridingTargetPrefab = MakeValidNetworkPrefab() }); - //Add a valid prefab - NetworkManagerHelper.NetworkManagerObject.NetworkConfig.NetworkPrefabs.Add(validNetworkPrefab); var exceptionOccurred = false; try { @@ -46,6 +69,9 @@ public void NetworkConfigInvalidNetworkPrefabTest() } Assert.False(exceptionOccurred); + + // In the end we should only have 3 valid registered network prefabs + Assert.True(NetworkManagerHelper.NetworkManagerObject.NetworkConfig.NetworkPrefabOverrideLinks.Count == 3); } From b4886a390f619fad07f8349ea31d4227cc805047 Mon Sep 17 00:00:00 2001 From: Noel Stephens Date: Sat, 21 Aug 2021 18:30:02 -0500 Subject: [PATCH 04/11] refactor and style fixed a typo in a comment in one of the newly added prefab registration checks added a check for a valid hash override but invalid target prefab --- .../Tests/Runtime/NetworkPrefabHandlerTests.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkPrefabHandlerTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkPrefabHandlerTests.cs index 0e4802b658..5b1596d782 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkPrefabHandlerTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkPrefabHandlerTests.cs @@ -42,6 +42,9 @@ public void NetworkConfigInvalidNetworkPrefabTest() // Add a NetworkPrefab override with an invalid hash NetworkManagerHelper.NetworkManagerObject.NetworkConfig.NetworkPrefabs.Add(new NetworkPrefab() { Override = NetworkPrefabOverride.Hash, SourceHashToOverride = 0 }); + + // Add a NetworkPrefab override with a valid hash but an invalid target prefab + NetworkManagerHelper.NetworkManagerObject.NetworkConfig.NetworkPrefabs.Add(new NetworkPrefab() { Override = NetworkPrefabOverride.Hash, SourceHashToOverride = 654321, OverridingTargetPrefab = null }); // Add a NetworkPrefab override with an invalid source prefab to override NetworkManagerHelper.NetworkManagerObject.NetworkConfig.NetworkPrefabs.Add(new NetworkPrefab() { Override = NetworkPrefabOverride.Prefab, SourcePrefabToOverride = null }); @@ -55,7 +58,7 @@ public void NetworkConfigInvalidNetworkPrefabTest() // Add a NetworkPrefab override with a valid hash and valid target NetworkManagerHelper.NetworkManagerObject.NetworkConfig.NetworkPrefabs.Add(new NetworkPrefab() { Override = NetworkPrefabOverride.Hash, SourceHashToOverride = 11111111, OverridingTargetPrefab = MakeValidNetworkPrefab() }); - // Add a NetworkPrefab override with a valid hash and valid target + // Add a NetworkPrefab override with a valid prefab and valid target NetworkManagerHelper.NetworkManagerObject.NetworkConfig.NetworkPrefabs.Add(new NetworkPrefab() { Override = NetworkPrefabOverride.Prefab, SourcePrefabToOverride = MakeValidNetworkPrefab(), OverridingTargetPrefab = MakeValidNetworkPrefab() }); var exceptionOccurred = false; From e1339bf0a4fff9624c274f7860d15235d7ea141c Mon Sep 17 00:00:00 2001 From: NoelStephensUnity <73188597+NoelStephensUnity@users.noreply.github.com> Date: Sat, 21 Aug 2021 18:34:30 -0500 Subject: [PATCH 05/11] test and style fixing comment and adding one of the potential invalid combinations (valid hash but invalid target prefab). --- .../Tests/Runtime/NetworkPrefabHandlerTests.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkPrefabHandlerTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkPrefabHandlerTests.cs index 0e4802b658..c803b08b7f 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkPrefabHandlerTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkPrefabHandlerTests.cs @@ -43,6 +43,9 @@ public void NetworkConfigInvalidNetworkPrefabTest() // Add a NetworkPrefab override with an invalid hash NetworkManagerHelper.NetworkManagerObject.NetworkConfig.NetworkPrefabs.Add(new NetworkPrefab() { Override = NetworkPrefabOverride.Hash, SourceHashToOverride = 0 }); + // Add a NetworkPrefab override with a valid hash to override but an invalid target prefab + NetworkManagerHelper.NetworkManagerObject.NetworkConfig.NetworkPrefabs.Add(new NetworkPrefab() { Override = NetworkPrefabOverride.Prefab, SourceHashToOverride = 654321, OverridingTargetPrefab = null }); + // Add a NetworkPrefab override with an invalid source prefab to override NetworkManagerHelper.NetworkManagerObject.NetworkConfig.NetworkPrefabs.Add(new NetworkPrefab() { Override = NetworkPrefabOverride.Prefab, SourcePrefabToOverride = null }); @@ -52,10 +55,10 @@ public void NetworkConfigInvalidNetworkPrefabTest() // Add a valid prefab NetworkManagerHelper.NetworkManagerObject.NetworkConfig.NetworkPrefabs.Add(new NetworkPrefab() { Prefab = MakeValidNetworkPrefab() }); - // Add a NetworkPrefab override with a valid hash and valid target + // Add a NetworkPrefab override with a valid hash and valid target prefab NetworkManagerHelper.NetworkManagerObject.NetworkConfig.NetworkPrefabs.Add(new NetworkPrefab() { Override = NetworkPrefabOverride.Hash, SourceHashToOverride = 11111111, OverridingTargetPrefab = MakeValidNetworkPrefab() }); - // Add a NetworkPrefab override with a valid hash and valid target + // Add a NetworkPrefab override with a valid source prefab and valid target prefab NetworkManagerHelper.NetworkManagerObject.NetworkConfig.NetworkPrefabs.Add(new NetworkPrefab() { Override = NetworkPrefabOverride.Prefab, SourcePrefabToOverride = MakeValidNetworkPrefab(), OverridingTargetPrefab = MakeValidNetworkPrefab() }); var exceptionOccurred = false; From fa7eabae85d7713528369e33dd55c1be8ddbbe86 Mon Sep 17 00:00:00 2001 From: NoelStephensUnity <73188597+NoelStephensUnity@users.noreply.github.com> Date: Mon, 23 Aug 2021 16:29:35 -0500 Subject: [PATCH 06/11] fix Fixing issue with the prefab not pointing to the right network prefab which made the client side not register the proper network prefab to override since disabling scene management requires that in-scene placed NetworkObjects be spawned by the server. --- testproject/Assets/Prefabs/PrefabPoolCapsule.prefab | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testproject/Assets/Prefabs/PrefabPoolCapsule.prefab b/testproject/Assets/Prefabs/PrefabPoolCapsule.prefab index 8e0c666bbc..415558a061 100644 --- a/testproject/Assets/Prefabs/PrefabPoolCapsule.prefab +++ b/testproject/Assets/Prefabs/PrefabPoolCapsule.prefab @@ -60,7 +60,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 83e085235981b734bad565d9a60de47a, type: 3} m_Name: m_EditorClassIdentifier: - m_ObjectToPool: {fileID: 6137946741893414299, guid: d2bccc96d1636264fa43b546a1b617c3, + m_ObjectToPool: {fileID: 672869341006996560, guid: 23a6a208dc8f7b946a001fbfe1968aa9, type: 3} m_ObjectPoolSize: 15 m_SpawnsPerSecond: 2 From bce33c8d0af8eb6f8d33635eb99a45693be7da8f Mon Sep 17 00:00:00 2001 From: Noel Stephens Date: Tue, 24 Aug 2021 09:12:09 -0500 Subject: [PATCH 07/11] Update com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs Co-authored-by: M. Fatih MAR --- com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs b/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs index 8b9859c71d..52b24e421d 100644 --- a/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs +++ b/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs @@ -479,8 +479,7 @@ private void Initialize(bool server) removeEmptyPrefabs.Add(i); continue; } - else - if (NetworkConfig.NetworkPrefabs[i].Override == NetworkPrefabOverride.None) + else if (NetworkConfig.NetworkPrefabs[i].Override == NetworkPrefabOverride.None) { networkObject = NetworkConfig.NetworkPrefabs[i].Prefab.GetComponent(); if (networkObject == null) From a587c39f9b89feeda9e35ba3afcc649569db5ab4 Mon Sep 17 00:00:00 2001 From: Noel Stephens Date: Tue, 24 Aug 2021 09:15:13 -0500 Subject: [PATCH 08/11] Update com.unity.netcode.gameobjects/Tests/Runtime/NetworkPrefabHandlerTests.cs Co-authored-by: M. Fatih MAR --- .../Tests/Runtime/NetworkPrefabHandlerTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkPrefabHandlerTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkPrefabHandlerTests.cs index e76b9cb88c..02f5d2392f 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkPrefabHandlerTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkPrefabHandlerTests.cs @@ -16,7 +16,7 @@ namespace Unity.Netcode.RuntimeTests public class NetworkPrefabHandlerTests { - private const string k_TestPrefabObjectName = "NetworkPrefaTestObject"; + private const string k_TestPrefabObjectName = "NetworkPrefabTestObject"; private uint m_GlobalObjectIdHashBase = 123456; private GameObject MakeValidNetworkPrefab() { From fd263d54bb5d86779744ab8e5ed480015568c386 Mon Sep 17 00:00:00 2001 From: Noel Stephens Date: Tue, 24 Aug 2021 09:15:51 -0500 Subject: [PATCH 09/11] Update com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs Co-authored-by: M. Fatih MAR --- com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs b/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs index 52b24e421d..640d8cc301 100644 --- a/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs +++ b/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs @@ -534,7 +534,7 @@ private void Initialize(bool server) { if (NetworkLog.CurrentLogLevel <= LogLevel.Error) { - NetworkLog.LogWarning($"{nameof(NetworkPrefab)} (\"{NetworkConfig.NetworkPrefabs[i].SourcePrefabToOverride.name}\") " + + NetworkLog.LogWarning($"{nameof(NetworkPrefab)} ({NetworkConfig.NetworkPrefabs[i].SourcePrefabToOverride.name}) " + $"is missing a {nameof(NetworkObject)} component (entry will be ignored)."); } Debug.LogWarning($"{nameof(NetworkPrefab)} override entry (\"{NetworkConfig.NetworkPrefabs[i].SourcePrefabToOverride.name}\") will be removed and ignored."); From 7fb0aebf2ce855824360de266906a1b127879317 Mon Sep 17 00:00:00 2001 From: Noel Stephens Date: Tue, 24 Aug 2021 09:15:58 -0500 Subject: [PATCH 10/11] Update com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs Co-authored-by: M. Fatih MAR --- com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs b/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs index 640d8cc301..effa2a2268 100644 --- a/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs +++ b/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs @@ -564,7 +564,7 @@ private void Initialize(bool server) } case NetworkPrefabOverride.Prefab: { - Debug.LogWarning($"{nameof(NetworkPrefab)} override entry (\"{NetworkConfig.NetworkPrefabs[i].SourcePrefabToOverride.name}\") will be removed and ignored."); + Debug.LogWarning($"{nameof(NetworkPrefab)} override entry ({NetworkConfig.NetworkPrefabs[i].SourcePrefabToOverride.name}) will be removed and ignored."); break; } } From d02bad2ffcf8357cf3f5dc8a8b4b8a13ab2281bd Mon Sep 17 00:00:00 2001 From: Noel Stephens Date: Tue, 24 Aug 2021 09:47:19 -0500 Subject: [PATCH 11/11] Update com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs Co-authored-by: M. Fatih MAR --- com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs b/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs index effa2a2268..19385524fc 100644 --- a/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs +++ b/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs @@ -614,7 +614,7 @@ private void Initialize(bool server) else { // This should never happen, but in the case it somehow does log an error and remove the duplicate entry - Debug.LogError($"{nameof(NetworkPrefab)} (\"{networkObject.name}\") has a duplicate {nameof(NetworkObject.GlobalObjectIdHash)} source entry value of: {sourcePrefabGlobalObjectIdHash}! Removing entry from list!"); + Debug.LogError($"{nameof(NetworkPrefab)} ({networkObject.name}) has a duplicate {nameof(NetworkObject.GlobalObjectIdHash)} source entry value of: {sourcePrefabGlobalObjectIdHash}! Removing entry from list!"); removeEmptyPrefabs.Add(i); } }