using System.Collections.Generic; using System.IO; using UnityEditor; using UnityEngine; namespace Obi { class ObiSettingsProvider : SettingsProvider { private SerializedObject m_ObiSettings; class Styles { public static GUIContent particleBrush = new GUIContent("Brush"); public static GUIContent brushWireframe = new GUIContent("Brush wireframe"); public static GUIContent particle = new GUIContent("Particle"); public static GUIContent selectedParticle = new GUIContent("Selected particle"); public static GUIContent activeParticle = new GUIContent("Active particle"); public static GUIContent propertyGradient = new GUIContent("Property gradient"); public static GUIContent particlePicking = new GUIContent("Particle GO picking"); } const string m_ObiEditorSettingsPath = "Assets/ObiEditorSettings.asset"; public ObiSettingsProvider(string path, SettingsScope scope = SettingsScope.User) : base(path, scope) { } public static bool IsSettingsAvailable() { return File.Exists(m_ObiEditorSettingsPath); } #if UNITY_2019_1_OR_NEWER public override void OnActivate(string searchContext, UnityEngine.UIElements.VisualElement rootElement) #else public override void OnActivate(string searchContext, UnityEngine.Experimental.UIElements.VisualElement rootElement) #endif { // This function is called when the user clicks on the MyCustom element in the Settings window. m_ObiSettings = ObiEditorSettings.GetSerializedSettings(); } public override void OnDeactivate() { base.OnDeactivate(); if (m_ObiSettings != null) m_ObiSettings.ApplyModifiedProperties(); } public override void OnGUI(string searchContext) { EditorGUILayout.LabelField("Colors", EditorStyles.boldLabel); EditorGUILayout.PropertyField(m_ObiSettings.FindProperty("m_ParticleBrush"), Styles.particleBrush); EditorGUILayout.PropertyField(m_ObiSettings.FindProperty("m_BrushWireframe"),Styles.brushWireframe); EditorGUILayout.PropertyField(m_ObiSettings.FindProperty("m_Particle"),Styles.particle); EditorGUILayout.PropertyField(m_ObiSettings.FindProperty("m_SelectedParticle"),Styles.selectedParticle); EditorGUILayout.PropertyField(m_ObiSettings.FindProperty("m_ActiveParticle"), Styles.activeParticle); EditorGUILayout.PropertyField(m_ObiSettings.FindProperty("m_PropertyGradient"), Styles.propertyGradient); EditorGUILayout.LabelField("Scene view", EditorStyles.boldLabel); EditorGUILayout.PropertyField(m_ObiSettings.FindProperty("m_ParticlePicking"), Styles.particlePicking); } // Register the SettingsProvider [SettingsProvider] public static SettingsProvider CreateMyCustomSettingsProvider() { if (IsSettingsAvailable()) { var provider = new ObiSettingsProvider("Preferences/Obi", SettingsScope.User); // Automatically extract all keywords from the Styles. provider.keywords = GetSearchKeywordsFromGUIContentProperties(); return provider; } // Settings Asset doesn't exist yet; no need to display anything in the Settings window. return null; } } }