Skip to content

Commit 21cf55e

Browse files
fix: allow the check for a NetworkObject component on NetworkBehaviours to be disabled (#3031)
* update Adding additional configuration parameter, NetworkBehaviour-Check-For-NetworkObject, that provides user the ability to bypass the automatic check for a NetworkObject on a NetworkBehaviour (in editor only). * update Adding project settings UI for the added check for networkobject property. * update Exiting early if the check for NetworkObject setting is disabled. * update change log entry * update Disable and uncheck the Auto-Add NetworkObject Component when Check For NetworkObject Component is disabled. Enable Auto-Add NetworkObject Component when Check For NetworkObject Component is re-enabled. User can select if they want to re-check the Auto-Add NetworkObject Component at that point. * Update CHANGELOG.md
1 parent 40f84dc commit 21cf55e

File tree

4 files changed

+46
-4
lines changed

4 files changed

+46
-4
lines changed

com.unity.netcode.gameobjects/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ Additional documentation and release notes are available at [Multiplayer Documen
1010

1111
### Added
1212

13+
- Added "Check for NetworkObject Component" property to the Multiplayer->Netcode for GameObjects project settings. When disabled, this will bypass the in-editor `NetworkObject` check on `NetworkBehaviour` components. (#3031)
14+
1315
### Fixed
1416

1517
-Fixed issue where the `NetworkSpawnManager.HandleNetworkObjectShow` could throw an exception if one of the `NetworkObject` components to show was destroyed during the same frame. (#3030)

com.unity.netcode.gameobjects/Editor/Configuration/NetcodeForGameObjectsSettings.cs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ namespace Unity.Netcode.Editor.Configuration
55
internal class NetcodeForGameObjectsEditorSettings
66
{
77
internal const string AutoAddNetworkObjectIfNoneExists = "AutoAdd-NetworkObject-When-None-Exist";
8+
internal const string CheckForNetworkObject = "NetworkBehaviour-Check-For-NetworkObject";
89
internal const string InstallMultiplayerToolsTipDismissedPlayerPrefKey = "Netcode_Tip_InstallMPTools_Dismissed";
910

1011
internal static int GetNetcodeInstallMultiplayerToolTips()
@@ -28,13 +29,28 @@ internal static bool GetAutoAddNetworkObjectSetting()
2829
{
2930
return EditorPrefs.GetBool(AutoAddNetworkObjectIfNoneExists);
3031
}
31-
32+
// Default for this is false
3233
return false;
3334
}
3435

3536
internal static void SetAutoAddNetworkObjectSetting(bool autoAddSetting)
3637
{
3738
EditorPrefs.SetBool(AutoAddNetworkObjectIfNoneExists, autoAddSetting);
3839
}
40+
41+
internal static bool GetCheckForNetworkObjectSetting()
42+
{
43+
if (EditorPrefs.HasKey(CheckForNetworkObject))
44+
{
45+
return EditorPrefs.GetBool(CheckForNetworkObject);
46+
}
47+
// Default for this is true
48+
return true;
49+
}
50+
51+
internal static void SetCheckForNetworkObjectSetting(bool checkForNetworkObject)
52+
{
53+
EditorPrefs.SetBool(CheckForNetworkObject, checkForNetworkObject);
54+
}
3955
}
4056
}

com.unity.netcode.gameobjects/Editor/Configuration/NetcodeSettingsProvider.cs

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ private static void OnDeactivate()
8181

8282
internal static NetcodeSettingsLabel NetworkObjectsSectionLabel;
8383
internal static NetcodeSettingsToggle AutoAddNetworkObjectToggle;
84+
internal static NetcodeSettingsToggle CheckForNetworkObjectToggle;
8485
internal static NetcodeSettingsLabel MultiplayerToolsLabel;
8586
internal static NetcodeSettingsToggle MultiplayerToolTipStatusToggle;
8687

@@ -103,6 +104,11 @@ private static void CheckForInitialize()
103104
AutoAddNetworkObjectToggle = new NetcodeSettingsToggle("Auto-Add NetworkObject Component", "When enabled, NetworkObject components are automatically added to GameObjects when NetworkBehaviour components are added first.", 20);
104105
}
105106

107+
if (CheckForNetworkObjectToggle == null)
108+
{
109+
CheckForNetworkObjectToggle = new NetcodeSettingsToggle("Check for NetworkObject Component", "When disabled, the automatic check on NetworkBehaviours for an associated NetworkObject component will not be performed and Auto-Add NetworkObject Component will be disabled.", 20);
110+
}
111+
106112
if (MultiplayerToolsLabel == null)
107113
{
108114
MultiplayerToolsLabel = new NetcodeSettingsLabel("Multiplayer Tools", 20);
@@ -120,7 +126,9 @@ private static void OnGuiHandler(string obj)
120126
CheckForInitialize();
121127

122128
var autoAddNetworkObjectSetting = NetcodeForGameObjectsEditorSettings.GetAutoAddNetworkObjectSetting();
129+
var checkForNetworkObjectSetting = NetcodeForGameObjectsEditorSettings.GetCheckForNetworkObjectSetting();
123130
var multiplayerToolsTipStatus = NetcodeForGameObjectsEditorSettings.GetNetcodeInstallMultiplayerToolTips() == 0;
131+
124132
var settings = NetcodeForGameObjectsProjectSettings.instance;
125133
var generateDefaultPrefabs = settings.GenerateDefaultNetworkPrefabs;
126134
var networkPrefabsPath = settings.TempNetworkPrefabsPath;
@@ -134,7 +142,13 @@ private static void OnGuiHandler(string obj)
134142
{
135143
GUILayout.BeginVertical("Box");
136144
NetworkObjectsSectionLabel.DrawLabel();
137-
autoAddNetworkObjectSetting = AutoAddNetworkObjectToggle.DrawToggle(autoAddNetworkObjectSetting);
145+
146+
autoAddNetworkObjectSetting = AutoAddNetworkObjectToggle.DrawToggle(autoAddNetworkObjectSetting, checkForNetworkObjectSetting);
147+
checkForNetworkObjectSetting = CheckForNetworkObjectToggle.DrawToggle(checkForNetworkObjectSetting);
148+
if (autoAddNetworkObjectSetting && !checkForNetworkObjectSetting)
149+
{
150+
autoAddNetworkObjectSetting = false;
151+
}
138152
GUILayout.EndVertical();
139153

140154
GUILayout.BeginVertical("Box");
@@ -184,6 +198,7 @@ private static void OnGuiHandler(string obj)
184198
if (EditorGUI.EndChangeCheck())
185199
{
186200
NetcodeForGameObjectsEditorSettings.SetAutoAddNetworkObjectSetting(autoAddNetworkObjectSetting);
201+
NetcodeForGameObjectsEditorSettings.SetCheckForNetworkObjectSetting(checkForNetworkObjectSetting);
187202
NetcodeForGameObjectsEditorSettings.SetNetcodeInstallMultiplayerToolTips(multiplayerToolsTipStatus ? 0 : 1);
188203
settings.GenerateDefaultNetworkPrefabs = generateDefaultPrefabs;
189204
settings.TempNetworkPrefabsPath = networkPrefabsPath;
@@ -213,10 +228,13 @@ internal class NetcodeSettingsToggle : NetcodeGUISettings
213228
{
214229
private GUIContent m_ToggleContent;
215230

216-
public bool DrawToggle(bool currentSetting)
231+
public bool DrawToggle(bool currentSetting, bool enabled = true)
217232
{
218233
EditorGUIUtility.labelWidth = m_LabelSize;
219-
return EditorGUILayout.Toggle(m_ToggleContent, currentSetting, m_LayoutWidth);
234+
GUI.enabled = enabled;
235+
var returnValue = EditorGUILayout.Toggle(m_ToggleContent, currentSetting, m_LayoutWidth);
236+
GUI.enabled = true;
237+
return returnValue;
220238
}
221239

222240
public NetcodeSettingsToggle(string labelText, string toolTip, float layoutOffset)

com.unity.netcode.gameobjects/Editor/NetworkBehaviourEditor.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,12 @@ public static void CheckForNetworkObject(GameObject gameObject, bool networkObje
352352
return;
353353
}
354354

355+
// If this automatic check is disabled, then do not perform this check.
356+
if (!NetcodeForGameObjectsEditorSettings.GetCheckForNetworkObjectSetting())
357+
{
358+
return;
359+
}
360+
355361
// Now get the root parent transform to the current GameObject (or itself)
356362
var rootTransform = GetRootParentTransform(gameObject.transform);
357363
if (!rootTransform.TryGetComponent<NetworkManager>(out var networkManager))

0 commit comments

Comments
 (0)