public static SettingsProvider CreateSettingsProvider() { SettingsProvider provider = new SettingsProvider("Project/Udon Sharp", SettingsScope.Project) { label = "Udon Sharp", keywords = new HashSet <string>(new string[] { "Udon", "Sharp", "U#", "VRC", "VRChat" }), guiHandler = (searchContext) => { UdonSharpSettings settings = UdonSharpSettings.GetOrCreateSettings(); SerializedObject settingsObject = UdonSharpSettings.GetSerializedSettings(); EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(settingsObject.FindProperty(nameof(UdonSharpSettings.autoCompileOnModify)), autoCompileLabel); if (settings.autoCompileOnModify) { EditorGUILayout.PropertyField(settingsObject.FindProperty(nameof(UdonSharpSettings.compileAllScripts)), compileAllLabel); if (!settings.compileAllScripts) { EditorGUILayout.HelpBox("Only compiling the script that has been modified can cause issues if you have multiple scripts communicating via methods.", MessageType.Warning); } } EditorGUILayout.PropertyField(settingsObject.FindProperty(nameof(UdonSharpSettings.waitForFocus)), waitForFocusLabel); EditorGUILayout.PropertyField(settingsObject.FindProperty(nameof(UdonSharpSettings.newScriptTemplateOverride)), templateOverrideLabel); EditorGUILayout.PropertyField(settingsObject.FindProperty(nameof(UdonSharpSettings.scanningDirectoryBlacklist)), scanningBlackListLabel, true); EditorGUILayout.Space(); EditorGUILayout.LabelField("Debugging", EditorStyles.boldLabel); EditorGUILayout.PropertyField(settingsObject.FindProperty(nameof(UdonSharpSettings.buildDebugInfo)), includeDebugInfoLabel); if (settings.buildDebugInfo) { EditorGUILayout.PropertyField(settingsObject.FindProperty(nameof(UdonSharpSettings.includeInlineCode)), includeInlineCodeLabel); EditorGUILayout.PropertyField(settingsObject.FindProperty(nameof(UdonSharpSettings.listenForVRCExceptions)), listenForVRCExceptionsLabel); } EditorGUILayout.Space(); EditorGUILayout.LabelField("Experimental", EditorStyles.boldLabel); EditorGUILayout.PropertyField(settingsObject.FindProperty(nameof(UdonSharpSettings.shouldForceCompile)), forceCompileLabel); if (EditorGUI.EndChangeCheck()) { settingsObject.ApplyModifiedProperties(); EditorUtility.SetDirty(UdonSharpSettings.GetSettings()); } }, }; return(provider); }
public static SettingsProvider CreateSettingsProvider() { SettingsProvider provider = new SettingsProvider("Project/Udon Sharp", SettingsScope.Project) { label = "Udon Sharp", keywords = new HashSet <string>(new string[] { "Udon", "Sharp", "U#", "VRC", "VRChat" }), guiHandler = (searchContext) => { UdonSharpSettings settings = UdonSharpSettings.GetOrCreateSettings(); SerializedObject settingsObject = UdonSharpSettings.GetSerializedSettings(); // Compiler settings EditorGUILayout.LabelField("Compiler", EditorStyles.boldLabel); EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(settingsObject.FindProperty(nameof(UdonSharpSettings.autoCompileOnModify)), autoCompileLabel); if (settings.autoCompileOnModify) { EditorGUILayout.PropertyField(settingsObject.FindProperty(nameof(UdonSharpSettings.compileAllScripts)), compileAllLabel); if (!settings.compileAllScripts) { EditorGUILayout.HelpBox("Only compiling the script that has been modified can cause issues if you have multiple scripts communicating via methods.", MessageType.Warning); } } EditorGUILayout.PropertyField(settingsObject.FindProperty(nameof(UdonSharpSettings.waitForFocus)), waitForFocusLabel); EditorGUILayout.PropertyField(settingsObject.FindProperty(nameof(UdonSharpSettings.disableUploadCompile)), disableUploadCompileLabel); if (settings.disableUploadCompile) { EditorGUILayout.HelpBox(@"Do not disable this setting unless it is not viable to wait for the compile on upload process. Disabling this setting will make the UNITY_EDITOR define not work as expected and will break prefabs that depend on the define being accurate between game and editor builds.", MessageType.Warning); } EditorGUILayout.PropertyField(settingsObject.FindProperty(nameof(UdonSharpSettings.newScriptTemplateOverride)), templateOverrideLabel); EditorGUILayout.PropertyField(settingsObject.FindProperty(nameof(UdonSharpSettings.scanningDirectoryBlacklist)), scanningBlackListLabel, true); EditorGUILayout.Space(); // Interface settings EditorGUILayout.LabelField("Interface", EditorStyles.boldLabel); SerializedProperty defaultDrawerProperty = settingsObject.FindProperty(nameof(UdonSharpSettings.defaultBehaviourInterfaceType)); defaultDrawerProperty.stringValue = DrawCustomEditorSelection(defaultDrawerProperty.stringValue); EditorGUILayout.Space(); // Debugging settings EditorGUILayout.LabelField("Debugging", EditorStyles.boldLabel); EditorGUILayout.PropertyField(settingsObject.FindProperty(nameof(UdonSharpSettings.buildDebugInfo)), includeDebugInfoLabel); if (settings.buildDebugInfo) { EditorGUILayout.PropertyField(settingsObject.FindProperty(nameof(UdonSharpSettings.includeInlineCode)), includeInlineCodeLabel); EditorGUILayout.PropertyField(settingsObject.FindProperty(nameof(UdonSharpSettings.listenForVRCExceptions)), listenForVRCExceptionsLabel); } EditorGUILayout.Space(); SerializedProperty watcherModeProperty = settingsObject.FindProperty(nameof(UdonSharpSettings.watcherMode)); EditorGUILayout.PropertyField(watcherModeProperty, outputLogWatcherModeLabel); if (watcherModeProperty.enumValueIndex == (int)UdonSharpSettings.LogWatcherMode.Prefix) { EditorGUILayout.PropertyField(settingsObject.FindProperty(nameof(UdonSharpSettings.logWatcherMatchStrings)), prefixArrayLabel, true); } EditorGUILayout.Space(); // Experimental settings EditorGUILayout.LabelField("Experimental", EditorStyles.boldLabel); EditorGUILayout.PropertyField(settingsObject.FindProperty(nameof(UdonSharpSettings.shouldForceCompile)), forceCompileLabel); if (EditorGUI.EndChangeCheck()) { settingsObject.ApplyModifiedProperties(); EditorUtility.SetDirty(UdonSharpSettings.GetSettings()); } }, }; return(provider); }