Unity 框架

Preference.cs 3.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. /****************************************************
  2. 文件:Preference.cs
  3. 作者:陶长春
  4. 邮箱:376248129@qq.com
  5. 日期:2025年2月11日 6:32:03
  6. UnityVersion: 2021.3.13f1
  7. 功能:偏好设置
  8. *****************************************************/
  9. using System.Collections.Generic;
  10. using UnityEditor;
  11. using UnityEngine;
  12. namespace TFramework
  13. {
  14. public class Preference : EditorWindow
  15. {
  16. [MenuItem("TFramework/偏好设置")]
  17. public static void Open()
  18. {
  19. Preference win = GetWindow<Preference>();
  20. win.minSize = new Vector2(200,300);
  21. win.titleContent.image = EditorGUIUtility.IconContent("d__Popup@2x").image;
  22. win.titleContent.text = "偏好设置";
  23. }
  24. const string DATAPATH = "Assets/TFramework/Editor/Data/PreferenceData.asset";
  25. PreferenceData preferenceData;
  26. private void OnEnable()
  27. {
  28. preferenceData = AssetDatabase.LoadAssetAtPath<PreferenceData>(DATAPATH);
  29. if(preferenceData == null )
  30. {
  31. preferenceData = CreateInstance<PreferenceData>();
  32. AssetDatabase.CreateAsset(preferenceData, DATAPATH);
  33. AssetDatabase.SaveAssets();
  34. }
  35. }
  36. private void OnGUI()
  37. {
  38. if (preferenceData == null) return;
  39. using(new EditorGUILayout.HorizontalScope())
  40. {
  41. GUILayout.Label("自动保存");
  42. preferenceData.m_isAutoSave = EditorGUILayout.Toggle(preferenceData.m_isAutoSave);
  43. }
  44. using(new EditorGUILayout.HorizontalScope())
  45. {
  46. GUI.enabled = preferenceData.m_isAutoSave;
  47. GUILayout.Label("保存间隔(分钟)");
  48. preferenceData.m_autoSaveTime = EditorGUILayout.FloatField(preferenceData.m_autoSaveTime);
  49. GUI.enabled = true;
  50. }
  51. using (new EditorGUILayout.HorizontalScope())
  52. {
  53. GUILayout.Label("始终从指定场景开始:");
  54. preferenceData.m_isAlwaysFormAssignScene = EditorGUILayout.Toggle(preferenceData.m_isAlwaysFormAssignScene);
  55. }
  56. using (new EditorGUILayout.HorizontalScope())
  57. {
  58. GUI.enabled = preferenceData.m_isAlwaysFormAssignScene;
  59. GUILayout.Label("指定场景:");
  60. Object scene = AssetDatabase.LoadAssetAtPath<Object>(preferenceData.m_assignScene);
  61. using (new EditorGUILayout.VerticalScope())
  62. {
  63. scene = EditorGUILayout.ObjectField(scene, typeof(Object), false);
  64. if(preferenceData.m_isAlwaysFormAssignScene)
  65. {
  66. if (scene == null)
  67. EditorGUILayout.HelpBox("请指定一个场景资源!", MessageType.Info);
  68. else if (!AssetDatabase.GetAssetPath(scene).EndsWith(".unity"))
  69. EditorGUILayout.HelpBox("选择的资源不是场景资源!", MessageType.Error);
  70. else
  71. {
  72. preferenceData.m_assignScene = AssetDatabase.GetAssetPath(scene);
  73. }
  74. }
  75. }
  76. GUI.enabled = true;
  77. }
  78. }
  79. private void OnDisable()
  80. {
  81. SaveData();
  82. }
  83. private void SaveData()
  84. {
  85. if (preferenceData == null) return;
  86. EditorUtility.SetDirty(preferenceData);
  87. AssetDatabase.SaveAssets();
  88. }
  89. }
  90. }