Skip to content

Commit 505261c

Browse files
fix: allow the check for a NetworkObject component on NetworkBehaviours to be disabled (Back Port) (#3034)
* update Add editor UI and additional NGO setting. * update Add check to see if we should perform the check for NetworkObject. * update Add the changelog entry
1 parent 4470a47 commit 505261c

File tree

4 files changed

+44
-4
lines changed

4 files changed

+44
-4
lines changed

com.unity.netcode.gameobjects/CHANGELOG.md

+2
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. (#3034)
14+
1315
### Fixed
1416

1517
- Fixed issue where collections v2.2.x was not supported when using UTP v2.2.x within Unity v2022.3. (#3033)

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

+17-1
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

+19-3
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,6 +126,7 @@ 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;
124131
var settings = NetcodeForGameObjectsProjectSettings.instance;
125132
var generateDefaultPrefabs = settings.GenerateDefaultNetworkPrefabs;
@@ -134,7 +141,12 @@ private static void OnGuiHandler(string obj)
134141
{
135142
GUILayout.BeginVertical("Box");
136143
NetworkObjectsSectionLabel.DrawLabel();
137-
autoAddNetworkObjectSetting = AutoAddNetworkObjectToggle.DrawToggle(autoAddNetworkObjectSetting);
144+
autoAddNetworkObjectSetting = AutoAddNetworkObjectToggle.DrawToggle(autoAddNetworkObjectSetting, checkForNetworkObjectSetting);
145+
checkForNetworkObjectSetting = CheckForNetworkObjectToggle.DrawToggle(checkForNetworkObjectSetting);
146+
if (autoAddNetworkObjectSetting && !checkForNetworkObjectSetting)
147+
{
148+
autoAddNetworkObjectSetting = false;
149+
}
138150
GUILayout.EndVertical();
139151

140152
GUILayout.BeginVertical("Box");
@@ -184,6 +196,7 @@ private static void OnGuiHandler(string obj)
184196
if (EditorGUI.EndChangeCheck())
185197
{
186198
NetcodeForGameObjectsEditorSettings.SetAutoAddNetworkObjectSetting(autoAddNetworkObjectSetting);
199+
NetcodeForGameObjectsEditorSettings.SetCheckForNetworkObjectSetting(checkForNetworkObjectSetting);
187200
NetcodeForGameObjectsEditorSettings.SetNetcodeInstallMultiplayerToolTips(multiplayerToolsTipStatus ? 0 : 1);
188201
settings.GenerateDefaultNetworkPrefabs = generateDefaultPrefabs;
189202
settings.TempNetworkPrefabsPath = networkPrefabsPath;
@@ -213,10 +226,13 @@ internal class NetcodeSettingsToggle : NetcodeGUISettings
213226
{
214227
private GUIContent m_ToggleContent;
215228

216-
public bool DrawToggle(bool currentSetting)
229+
public bool DrawToggle(bool currentSetting, bool enabled = true)
217230
{
218231
EditorGUIUtility.labelWidth = m_LabelSize;
219-
return EditorGUILayout.Toggle(m_ToggleContent, currentSetting, m_LayoutWidth);
232+
GUI.enabled = enabled;
233+
var returnValue = EditorGUILayout.Toggle(m_ToggleContent, currentSetting, m_LayoutWidth);
234+
GUI.enabled = true;
235+
return returnValue;
220236
}
221237

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

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

+6
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)