ProjectDataEditor.cs 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using UnityEditor;
  4. using UnityEngine;
  5. ///<summary>项目数据配置</summary>
  6. public class ProjectDataEditor : EditorWindow
  7. {
  8. [MenuItem("Tools/Framework/项目数据配置")]
  9. public static void ShowVoice()
  10. {
  11. ProjectDataEditor window = EditorWindow.GetWindow<ProjectDataEditor>("项目数据配置");
  12. window.Show();
  13. }
  14. ///<summary>宏元素</summary>
  15. private class MacroItem
  16. {
  17. ///<summary>宏名称</summary>
  18. public string Name;
  19. ///<summary>窗口上显示的名称</summary>
  20. public string DisplayName;
  21. ///<summary>是否发布</summary>
  22. public bool isRelease;
  23. ///<summary>默认宏</summary>
  24. public bool isDefault;
  25. }
  26. ///<summary>所有宏</summary>
  27. private List<MacroItem> macroitems = new List<MacroItem>();
  28. ///<summary>Macro</summary>
  29. private string Macro = null;
  30. private void OnEnable()
  31. {
  32. #if UNITY_ANDROID
  33. Macro = PlayerSettings.GetScriptingDefineSymbolsForGroup(BuildTargetGroup.Android);
  34. #else
  35. Macro = PlayerSettings.GetScriptingDefineSymbolsForGroup(BuildTargetGroup.Standalone);
  36. #endif
  37. List<string> macros = Macro.Split(';').ToList();
  38. macroitems.Clear();
  39. macroitems.Add(
  40. new MacroItem()
  41. {
  42. Name = "DEBUG_MODEL",
  43. DisplayName = "调试模式",
  44. isRelease = false
  45. }
  46. );
  47. macroitems.Add(
  48. new MacroItem()
  49. {
  50. Name = "DEBUG_LOG",
  51. DisplayName = "记录日志",
  52. isRelease = false
  53. }
  54. );
  55. macroitems.Add(
  56. new MacroItem()
  57. {
  58. Name = "MODE_TEST",
  59. DisplayName = "测试模式",
  60. isRelease = false
  61. }
  62. );
  63. macroitems.Add(
  64. new MacroItem()
  65. {
  66. Name = "COLLECT_DATA",
  67. DisplayName = "收集数据",
  68. isRelease = false
  69. }
  70. );
  71. //macroitems.Add(
  72. // new MacroItem()
  73. // {
  74. // Name = "PLATFORM_STEAMVR",
  75. // DisplayName = "SteamVR平台",
  76. // isRelease = false
  77. // }
  78. //);
  79. macroitems.Add(
  80. new MacroItem()
  81. {
  82. Name = "PLATFORM_PC",
  83. DisplayName = "PC平台",
  84. isRelease = false
  85. }
  86. );
  87. macroitems.Add(
  88. new MacroItem()
  89. {
  90. Name = "PLATFORM_PHONE",
  91. DisplayName = "手机平台",
  92. isRelease = false
  93. }
  94. );
  95. macroitems.Add(
  96. new MacroItem()
  97. {
  98. Name = "PLATFORM_PICO",
  99. DisplayName = "Pico平台",
  100. isRelease = false
  101. }
  102. );
  103. for (int i = 0; i < macros.Count; i++)
  104. {
  105. if (!macroitems.Exists(s => s.Name == macros[i]))
  106. {
  107. if (!string.IsNullOrEmpty(macros[i]))
  108. macroitems.Add(
  109. new MacroItem()
  110. {
  111. Name = macros[i],
  112. DisplayName = "其它",
  113. isRelease = false,
  114. isDefault = true
  115. }
  116. );
  117. }
  118. }
  119. for (int i = 0; i < macroitems.Count; i++)
  120. {
  121. if (macros.Exists(s => s == macroitems[i].Name))
  122. macroitems[i].isRelease = true;
  123. }
  124. }
  125. private void OnGUI()
  126. {
  127. EditorGUILayout.BeginHorizontal("box");
  128. GUILayout.Label("");
  129. GUILayout.Label("环境配置", GUILayout.Width(55));
  130. GUILayout.Label("");
  131. EditorGUILayout.EndHorizontal();
  132. for (int i = 0; i < macroitems.Count; i++)
  133. {
  134. EditorGUILayout.BeginHorizontal();
  135. GUILayout.Label("名称:", GUILayout.Width(30));
  136. GUILayout.Label(macroitems[i].DisplayName, GUILayout.Width(100));
  137. GUILayout.Label("宏 :", GUILayout.Width(30));
  138. EditorGUILayout.TextField(macroitems[i].Name);
  139. GUILayout.Label("是否开启:", GUILayout.Width(60));
  140. if (macroitems[i].isDefault)
  141. EditorGUILayout.Toggle(macroitems[i].isRelease, GUILayout.Width(15));
  142. else
  143. macroitems[i].isRelease = EditorGUILayout.Toggle(
  144. macroitems[i].isRelease,
  145. GUILayout.Width(15)
  146. );
  147. EditorGUILayout.EndHorizontal();
  148. }
  149. EditorGUILayout.BeginHorizontal();
  150. GUILayout.Label("");
  151. if (GUILayout.Button("保存", GUILayout.Width(100)))
  152. {
  153. Macro = string.Empty;
  154. for (int i = 0; i < macroitems.Count; i++)
  155. {
  156. if (macroitems[i].isRelease)
  157. {
  158. Macro += $"{macroitems[i].Name};";
  159. }
  160. }
  161. #if UNITY_ANDROID
  162. PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.Android, Macro);
  163. #else
  164. PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.Standalone, Macro);
  165. #endif
  166. SetObfuscator();
  167. AssetDatabase.Refresh();
  168. }
  169. EditorGUILayout.EndHorizontal();
  170. }
  171. ///<summary>设置混淆</summary>
  172. private void SetObfuscator()
  173. {
  174. //bool exis = macroitems.Exists(m => m.Name == "DEBUG_MODEL" && m.isRelease);
  175. //Options options = OptionsManager.LoadOptions();
  176. //if (options.enabled == exis)
  177. //{
  178. // options.enabled = !exis;
  179. // EditorUtility.SetDirty(options);
  180. // AssetDatabase.SaveAssets();
  181. //}
  182. }
  183. }