VFrameworkSettingEditor.cs 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. using System.Collections.Generic;
  2. using System.IO;
  3. using System.Linq;
  4. using UnityEditor;
  5. using UnityEditor.PackageManager;
  6. using UnityEngine;
  7. ///<summary>项目默认配置以及说明</summary>
  8. [InitializeOnLoad]
  9. public class VFrameworkSettingEditor : EditorWindow
  10. {
  11. [MenuItem("Tools/Framework/项目注意事项")]
  12. public static void ShowWindow()
  13. {
  14. VFrameworkSettingEditor window = GetWindow<VFrameworkSettingEditor>("项目注意事项");
  15. window.autoRepaintOnSceneChange = true;
  16. window.minSize = window.maxSize = new Vector2(600, 400);
  17. }
  18. static VFrameworkSettingEditor()
  19. {
  20. EditorApplication.update += Update;
  21. }
  22. private static void Update()
  23. {
  24. AssetDatabase.Refresh();
  25. Setting = AssetDatabase.LoadAssetAtPath<WS_ProjectSetting>("Assets/Editor/Framework/Other/WS_ProjectSetting.asset");
  26. if (Setting == null)
  27. {
  28. Setting = ScriptableObject.CreateInstance<WS_ProjectSetting>();
  29. AssetDatabase.CreateAsset(Setting, "Assets/Editor/Framework/Other/WS_ProjectSetting.asset");
  30. AssetDatabase.Refresh();
  31. }
  32. if (!Setting.IsInit)
  33. {
  34. #region -- 场景设置 --
  35. EditorBuildSettingsScene[] scenes = new EditorBuildSettingsScene[2];
  36. scenes[0] = new EditorBuildSettingsScene("Assets/Scenes/Init.unity", true);
  37. scenes[1] = new EditorBuildSettingsScene("Assets/Scenes/Loading.unity", true);
  38. EditorBuildSettings.scenes = scenes;
  39. #endregion
  40. #region -- 文件夹设置 --
  41. for (int i = 0; i < Files.Length; i++)
  42. {
  43. if (!Directory.Exists(Files[i]))
  44. Directory.CreateDirectory(Files[i]);
  45. }
  46. #endregion
  47. #region -- 渲染设置 --
  48. if (PlayerSettings.colorSpace != ColorSpace.Linear)
  49. PlayerSettings.colorSpace = ColorSpace.Linear;
  50. #endregion
  51. #region -- Package包设置 --
  52. Client.Add("com.unity.2d.sprite");
  53. #endregion
  54. #region -- 宏设置 --
  55. #if UNITY_ANDROID
  56. Macro = PlayerSettings.GetScriptingDefineSymbolsForGroup(BuildTargetGroup.Android);
  57. #else
  58. Macro = PlayerSettings.GetScriptingDefineSymbolsForGroup(BuildTargetGroup.Standalone);
  59. #endif
  60. List<string> macros = Macro.Split(';').ToList();
  61. if (!macros.Contains("DEBUG_MODEL"))
  62. {
  63. macros.Insert(0, "DEBUG_MODEL");
  64. for (int i = 0; i < macros.Count; i++)
  65. {
  66. Macro += $"{macros[i]};";
  67. }
  68. #if UNITY_ANDROID
  69. PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.Android, Macro);
  70. #else
  71. PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.Standalone, Macro);
  72. #endif
  73. }
  74. #endregion
  75. #region -- API设置 --
  76. ApiCompatibilityLevel api;
  77. #if UNITY_ANDROID
  78. api = PlayerSettings.GetApiCompatibilityLevel(BuildTargetGroup.Android);
  79. #else
  80. api = PlayerSettings.GetApiCompatibilityLevel(BuildTargetGroup.Standalone);
  81. #endif
  82. if (api != ApiCompatibilityLevel.NET_4_6)
  83. {
  84. #if UNITY_ANDROID
  85. PlayerSettings.SetApiCompatibilityLevel(BuildTargetGroup.Android, ApiCompatibilityLevel.NET_4_6);
  86. #else
  87. PlayerSettings.SetApiCompatibilityLevel(BuildTargetGroup.Standalone, ApiCompatibilityLevel.NET_4_6);
  88. #endif
  89. }
  90. #endregion
  91. Setting.IsInit = true;
  92. EditorUtility.SetDirty(Setting);
  93. AssetDatabase.SaveAssets();
  94. AssetDatabase.Refresh();
  95. }
  96. if (!PlayerPrefs.HasKey("IsLookAtThat"))
  97. ShowWindow();
  98. EditorApplication.update -= Update;
  99. }
  100. ///<summary>文件夹</summary>
  101. private static string[] Files = new[]
  102. {
  103. "Assets/GameResources/Model/Characters/",
  104. "Assets/GameResources/Model/Environment/",
  105. "Assets/GameResources/Prefabs/Characters/",
  106. "Assets/GameResources/Prefabs/Environment/",
  107. "Assets/GameResources/Prefabs/Item/",
  108. "Assets/GameResources/Shaders/",
  109. "Assets/Scripts/Data/Project/",
  110. "Assets/Resources/Config/Process/",
  111. "Assets/Log"
  112. };
  113. ///<summary>标题</summary>
  114. private GUIStyle titleText;
  115. ///<summary>内容</summary>
  116. private GUIStyle contentText;
  117. ///<summary>宏</summary>
  118. private static string Macro;
  119. ///<summary>设置</summary>
  120. private static WS_ProjectSetting Setting;
  121. private void OnEnable()
  122. {
  123. titleText = new GUIStyle();
  124. titleText.normal.textColor = Color.yellow;
  125. titleText.alignment = TextAnchor.UpperCenter;
  126. titleText.fontSize = 32;
  127. contentText = new GUIStyle();
  128. contentText.normal.textColor = Color.white;
  129. contentText.fontSize = 16;
  130. }
  131. private void OnGUI()
  132. {
  133. EditorGUILayout.BeginHorizontal();
  134. GUILayout.Label("项目注意事项", titleText);
  135. EditorGUILayout.EndHorizontal();
  136. GUILayout.Label("");
  137. GUILayout.Label("1.项目会在打包时代码混淆,<color=#FF0000>请谨用反射!</color>,添加<color=#00DFFF>SkipRename属性</color>的类会忽略混淆;", contentText);
  138. GUILayout.Label("2.所有需要Json序列化的结构(类),放到<color=#00DFFF>Assets/Scripts/Data</color>文件夹下避免被混淆;", contentText);
  139. GUILayout.Label("3.音频文件需要放在<color=#00DFFF>Assets/GameResources/Audio</color>文件夹下,然后在编辑器\n <color=#00DFFF>Tools/Framework/自动生成语音预制件</color>生成预制件;", contentText);
  140. GUILayout.Label("4.UI预制件需要放在<color=#00DFFF>Assets/Resources/UI</color>文件夹下在根据UI显示类型分类放入子目\n 录,然后在编辑器<color=#00DFFF>Tools/Framework/自动对应UI路径</color>生成路径预设;", contentText);
  141. GUILayout.Label("5.项目启动需要在<color=#00DFFF>Init场景</color>中的<color=#00DFFF>Init物体</color>挂载一个<color=#00DFFF>继承Init类</color>的派生类,在派生类的\n <color=#00DFFF>Initialize方法</color>为启动入口,派生类<color=#00DFFF>Update</color>方法不能使用替换为<color=#00DFFF>OnUpdate</color>方法;", contentText);
  142. GUILayout.Label("");
  143. EditorGUILayout.BeginHorizontal();
  144. GUILayout.Label("");
  145. if (GUILayout.Button("确定", GUILayout.Width(100)))
  146. {
  147. PlayerPrefs.SetInt("IsLookAtThat", 1);
  148. Close();
  149. }
  150. EditorGUILayout.EndHorizontal();
  151. }
  152. }