Unity 框架

Preference.cs 3.3KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. }
  30. private void OnGUI()
  31. {
  32. using(new EditorGUILayout.HorizontalScope())
  33. {
  34. GUILayout.Label("自动保存");
  35. preferenceData.m_isAutoSave = EditorGUILayout.Toggle(preferenceData.m_isAutoSave);
  36. }
  37. using(new EditorGUILayout.HorizontalScope())
  38. {
  39. GUI.enabled = preferenceData.m_isAutoSave;
  40. GUILayout.Label("保存间隔(分钟)");
  41. preferenceData.m_autoSaveTime = EditorGUILayout.FloatField(preferenceData.m_autoSaveTime);
  42. GUI.enabled = true;
  43. }
  44. using (new EditorGUILayout.HorizontalScope())
  45. {
  46. GUILayout.Label("始终从指定场景开始:");
  47. preferenceData.m_isAlwaysFormAssignScene = EditorGUILayout.Toggle(preferenceData.m_isAlwaysFormAssignScene);
  48. }
  49. using (new EditorGUILayout.HorizontalScope())
  50. {
  51. GUI.enabled = preferenceData.m_isAlwaysFormAssignScene;
  52. GUILayout.Label("指定场景:");
  53. Object scene = AssetDatabase.LoadAssetAtPath<Object>(preferenceData.m_assignScene);
  54. using (new EditorGUILayout.VerticalScope())
  55. {
  56. scene = EditorGUILayout.ObjectField(scene, typeof(Object), false);
  57. if(preferenceData.m_isAlwaysFormAssignScene)
  58. {
  59. if (scene == null)
  60. EditorGUILayout.HelpBox("请指定一个场景资源!", MessageType.Info);
  61. else if (!AssetDatabase.GetAssetPath(scene).EndsWith(".unity"))
  62. EditorGUILayout.HelpBox("选择的资源不是场景资源!", MessageType.Error);
  63. else
  64. {
  65. preferenceData.m_assignScene = AssetDatabase.GetAssetPath(scene);
  66. }
  67. }
  68. }
  69. GUI.enabled = true;
  70. }
  71. }
  72. private void OnDisable()
  73. {
  74. SaveData();
  75. }
  76. private void SaveData()
  77. {
  78. EditorUtility.SetDirty(preferenceData);
  79. AssetDatabase.SaveAssets();
  80. }
  81. }
  82. }