using UnityEditor.EditorTools; using UnityEngine; namespace UnityEditor.SettingsManagement.Examples { /// /// This example shows how to access multiple project setting repositories without making use of /// . /// [EditorTool("Editor Tool Settings Example")] class PerPlatformSettingsTool : EditorTool { #if !UNITY_2019_2_OR_NEWER public override GUIContent toolbarIcon { get { return new GUIContent("Settings Example Tool", "Settings Manager Example Tool"); } } #endif // This example creates two project settings repositories, A and B. static readonly string[] k_ProjectRepositories = new[] { "Settings A", "Settings B" }; // The settings manager. static Settings s_Settings; // This is the key that is used to store the color setting. const string k_ToolColorSetting = "ToolColor"; // Current tool color Color m_ToolColor; // The repository that color is read from and written to. int m_Repository; Vector3 m_HandlePosition; // Get the color value from a repository, setting a default value if the key does not already exist. This is // handled for you if using UserSetting{T}. Color GetToolColor(string repository, Color defaultColor) { if (!s_Settings.ContainsKey(k_ToolColorSetting, repository)) s_Settings.Set(k_ToolColorSetting, defaultColor, repository); return s_Settings.Get(k_ToolColorSetting, k_ProjectRepositories[m_Repository]); } void OnEnable() { s_Settings = new Settings(new ISettingsRepository[] { new UserSettingsRepository(), new PackageSettingsRepository("com.unity.settings-manager-examples", k_ProjectRepositories[0]), new PackageSettingsRepository("com.unity.settings-manager-examples", k_ProjectRepositories[1]) }); m_Repository = s_Settings.Get("ToolColorRepositoryName", SettingsScope.User); m_ToolColor = GetToolColor(k_ProjectRepositories[m_Repository], Color.blue); } public override void OnToolGUI(EditorWindow window) { Handles.BeginGUI(); GUILayout.BeginVertical(GUILayout.MaxWidth(300)); EditorGUI.BeginChangeCheck(); m_Repository = EditorGUILayout.IntPopup(m_Repository, k_ProjectRepositories, new int[] { 0, 1 }); if (EditorGUI.EndChangeCheck()) m_ToolColor = GetToolColor(k_ProjectRepositories[m_Repository], Color.blue); EditorGUI.BeginChangeCheck(); m_ToolColor = EditorGUILayout.ColorField(m_ToolColor); if (EditorGUI.EndChangeCheck()) { s_Settings.Set(k_ToolColorSetting, m_ToolColor, k_ProjectRepositories[m_Repository]); s_Settings.Save(); } GUILayout.EndVertical(); Handles.EndGUI(); using (new Handles.DrawingScope(m_ToolColor)) { m_HandlePosition = Handles.Slider(m_HandlePosition, Vector3.right); } } } }