PlatformSpecificTool.cs 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. using UnityEditor.EditorTools;
  2. using UnityEngine;
  3. namespace UnityEditor.SettingsManagement.Examples
  4. {
  5. /// <summary>
  6. /// This example shows how to access multiple project setting repositories without making use of
  7. /// <see cref="UserSetting{T}"/>.
  8. /// </summary>
  9. [EditorTool("Editor Tool Settings Example")]
  10. class PerPlatformSettingsTool : EditorTool
  11. {
  12. #if !UNITY_2019_2_OR_NEWER
  13. public override GUIContent toolbarIcon
  14. {
  15. get { return new GUIContent("Settings Example Tool", "Settings Manager Example Tool"); }
  16. }
  17. #endif
  18. // This example creates two project settings repositories, A and B.
  19. static readonly string[] k_ProjectRepositories = new[]
  20. {
  21. "Settings A",
  22. "Settings B"
  23. };
  24. // The settings manager.
  25. static Settings s_Settings;
  26. // This is the key that is used to store the color setting.
  27. const string k_ToolColorSetting = "ToolColor";
  28. // Current tool color
  29. Color m_ToolColor;
  30. // The repository that color is read from and written to.
  31. int m_Repository;
  32. Vector3 m_HandlePosition;
  33. // Get the color value from a repository, setting a default value if the key does not already exist. This is
  34. // handled for you if using UserSetting{T}.
  35. Color GetToolColor(string repository, Color defaultColor)
  36. {
  37. if (!s_Settings.ContainsKey<Color>(k_ToolColorSetting, repository))
  38. s_Settings.Set<Color>(k_ToolColorSetting, defaultColor, repository);
  39. return s_Settings.Get<Color>(k_ToolColorSetting, k_ProjectRepositories[m_Repository]);
  40. }
  41. void OnEnable()
  42. {
  43. s_Settings = new Settings(new ISettingsRepository[]
  44. {
  45. new UserSettingsRepository(),
  46. new PackageSettingsRepository("com.unity.settings-manager-examples", k_ProjectRepositories[0]),
  47. new PackageSettingsRepository("com.unity.settings-manager-examples", k_ProjectRepositories[1])
  48. });
  49. m_Repository = s_Settings.Get<int>("ToolColorRepositoryName", SettingsScope.User);
  50. m_ToolColor = GetToolColor(k_ProjectRepositories[m_Repository], Color.blue);
  51. }
  52. public override void OnToolGUI(EditorWindow window)
  53. {
  54. Handles.BeginGUI();
  55. GUILayout.BeginVertical(GUILayout.MaxWidth(300));
  56. EditorGUI.BeginChangeCheck();
  57. m_Repository = EditorGUILayout.IntPopup(m_Repository, k_ProjectRepositories, new int[] { 0, 1 });
  58. if (EditorGUI.EndChangeCheck())
  59. m_ToolColor = GetToolColor(k_ProjectRepositories[m_Repository], Color.blue);
  60. EditorGUI.BeginChangeCheck();
  61. m_ToolColor = EditorGUILayout.ColorField(m_ToolColor);
  62. if (EditorGUI.EndChangeCheck())
  63. {
  64. s_Settings.Set<Color>(k_ToolColorSetting, m_ToolColor, k_ProjectRepositories[m_Repository]);
  65. s_Settings.Save();
  66. }
  67. GUILayout.EndVertical();
  68. Handles.EndGUI();
  69. using (new Handles.DrawingScope(m_ToolColor))
  70. {
  71. m_HandlePosition = Handles.Slider(m_HandlePosition, Vector3.right);
  72. }
  73. }
  74. }
  75. }