_xiaofang/xiaofang/Assets/Obi/Editor/Common/ObiSettingsProvider.cs
杨号敬 bcc74f0465 add
2024-12-18 02:18:45 +08:00

81 lines
3.5 KiB
C#

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<Styles>();
return provider;
}
// Settings Asset doesn't exist yet; no need to display anything in the Settings window.
return null;
}
}
}