AssetBundleReporterWindow.cs 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. #if UNITY_2019_4_OR_NEWER
  2. using System;
  3. using UnityEditor;
  4. using UnityEngine;
  5. using UnityEditor.UIElements;
  6. using UnityEngine.UIElements;
  7. namespace YooAsset.Editor
  8. {
  9. public class AssetBundleReporterWindow : EditorWindow
  10. {
  11. [MenuItem("YooAsset/AssetBundle Reporter", false, 103)]
  12. public static void OpenWindow()
  13. {
  14. AssetBundleReporterWindow window = GetWindow<AssetBundleReporterWindow>("资源包报告工具", true, WindowsDefine.DockedWindowTypes);
  15. window.minSize = new Vector2(800, 600);
  16. }
  17. /// <summary>
  18. /// 视图模式
  19. /// </summary>
  20. private enum EViewMode
  21. {
  22. /// <summary>
  23. /// 概览视图
  24. /// </summary>
  25. Summary,
  26. /// <summary>
  27. /// 资源对象视图
  28. /// </summary>
  29. AssetView,
  30. /// <summary>
  31. /// 资源包视图
  32. /// </summary>
  33. BundleView,
  34. /// <summary>
  35. /// 冗余资源试图
  36. /// </summary>
  37. Redundancy,
  38. }
  39. private ToolbarMenu _viewModeMenu;
  40. private ReporterSummaryViewer _summaryViewer;
  41. private ReporterAssetListViewer _assetListViewer;
  42. private ReporterBundleListViewer _bundleListViewer;
  43. private ReporterRedundancyListViewer _redundancyListViewer;
  44. private EViewMode _viewMode;
  45. private BuildReport _buildReport;
  46. private string _reportFilePath;
  47. private string _searchKeyWord;
  48. public void CreateGUI()
  49. {
  50. try
  51. {
  52. VisualElement root = this.rootVisualElement;
  53. // 加载布局文件
  54. var visualAsset = UxmlLoader.LoadWindowUXML<AssetBundleReporterWindow>();
  55. if (visualAsset == null)
  56. return;
  57. visualAsset.CloneTree(root);
  58. // 导入按钮
  59. var importBtn = root.Q<Button>("ImportButton");
  60. importBtn.clicked += ImportBtn_onClick;
  61. // 视图模式菜单
  62. _viewModeMenu = root.Q<ToolbarMenu>("ViewModeMenu");
  63. _viewModeMenu.menu.AppendAction(EViewMode.Summary.ToString(), ViewModeMenuAction0, ViewModeMenuFun0);
  64. _viewModeMenu.menu.AppendAction(EViewMode.AssetView.ToString(), ViewModeMenuAction1, ViewModeMenuFun1);
  65. _viewModeMenu.menu.AppendAction(EViewMode.BundleView.ToString(), ViewModeMenuAction2, ViewModeMenuFun2);
  66. _viewModeMenu.menu.AppendAction(EViewMode.Redundancy.ToString(), ViewModeMenuAction3, ViewModeMenuFun3);
  67. // 搜索栏
  68. var searchField = root.Q<ToolbarSearchField>("SearchField");
  69. searchField.RegisterValueChangedCallback(OnSearchKeyWordChange);
  70. // 加载视图
  71. _summaryViewer = new ReporterSummaryViewer();
  72. _summaryViewer.InitViewer();
  73. // 加载视图
  74. _assetListViewer = new ReporterAssetListViewer();
  75. _assetListViewer.InitViewer();
  76. // 加载视图
  77. _bundleListViewer = new ReporterBundleListViewer();
  78. _bundleListViewer.InitViewer();
  79. // 加载试图
  80. _redundancyListViewer = new ReporterRedundancyListViewer();
  81. _redundancyListViewer.InitViewer();
  82. // 显示视图
  83. _viewMode = EViewMode.Summary;
  84. _viewModeMenu.text = EViewMode.Summary.ToString();
  85. _summaryViewer.AttachParent(root);
  86. }
  87. catch (Exception e)
  88. {
  89. Debug.LogError(e.ToString());
  90. }
  91. }
  92. public void OnDestroy()
  93. {
  94. AssetBundleRecorder.UnloadAll();
  95. }
  96. private void ImportBtn_onClick()
  97. {
  98. string selectFilePath = EditorUtility.OpenFilePanel("导入报告", EditorTools.GetProjectPath(), "json");
  99. if (string.IsNullOrEmpty(selectFilePath))
  100. return;
  101. _reportFilePath = selectFilePath;
  102. string jsonData = FileUtility.ReadAllText(_reportFilePath);
  103. _buildReport = BuildReport.Deserialize(jsonData);
  104. _summaryViewer.FillViewData(_buildReport);
  105. _assetListViewer.FillViewData(_buildReport, _searchKeyWord);
  106. _bundleListViewer.FillViewData(_buildReport, _reportFilePath, _searchKeyWord);
  107. _redundancyListViewer.FillViewData(_buildReport, _searchKeyWord);
  108. }
  109. private void OnSearchKeyWordChange(ChangeEvent<string> e)
  110. {
  111. _searchKeyWord = e.newValue;
  112. if (_buildReport != null)
  113. {
  114. _assetListViewer.FillViewData(_buildReport, _searchKeyWord);
  115. _bundleListViewer.FillViewData(_buildReport, _reportFilePath, _searchKeyWord);
  116. }
  117. }
  118. private void ViewModeMenuAction0(DropdownMenuAction action)
  119. {
  120. if (_viewMode != EViewMode.Summary)
  121. {
  122. _viewMode = EViewMode.Summary;
  123. VisualElement root = this.rootVisualElement;
  124. _viewModeMenu.text = EViewMode.Summary.ToString();
  125. _summaryViewer.AttachParent(root);
  126. _assetListViewer.DetachParent();
  127. _bundleListViewer.DetachParent();
  128. _redundancyListViewer.DetachParent();
  129. }
  130. }
  131. private void ViewModeMenuAction1(DropdownMenuAction action)
  132. {
  133. if (_viewMode != EViewMode.AssetView)
  134. {
  135. _viewMode = EViewMode.AssetView;
  136. VisualElement root = this.rootVisualElement;
  137. _viewModeMenu.text = EViewMode.AssetView.ToString();
  138. _summaryViewer.DetachParent();
  139. _assetListViewer.AttachParent(root);
  140. _bundleListViewer.DetachParent();
  141. _redundancyListViewer.DetachParent();
  142. }
  143. }
  144. private void ViewModeMenuAction2(DropdownMenuAction action)
  145. {
  146. if (_viewMode != EViewMode.BundleView)
  147. {
  148. _viewMode = EViewMode.BundleView;
  149. VisualElement root = this.rootVisualElement;
  150. _viewModeMenu.text = EViewMode.BundleView.ToString();
  151. _summaryViewer.DetachParent();
  152. _assetListViewer.DetachParent();
  153. _bundleListViewer.AttachParent(root);
  154. _redundancyListViewer.DetachParent();
  155. }
  156. }
  157. private void ViewModeMenuAction3(DropdownMenuAction action)
  158. {
  159. if (_viewMode != EViewMode.Redundancy)
  160. {
  161. _viewMode = EViewMode.Redundancy;
  162. VisualElement root = this.rootVisualElement;
  163. _viewModeMenu.text = EViewMode.Redundancy.ToString();
  164. _summaryViewer.DetachParent();
  165. _assetListViewer.DetachParent();
  166. _bundleListViewer.DetachParent();
  167. _redundancyListViewer.AttachParent(root);
  168. }
  169. }
  170. private DropdownMenuAction.Status ViewModeMenuFun0(DropdownMenuAction action)
  171. {
  172. if (_viewMode == EViewMode.Summary)
  173. return DropdownMenuAction.Status.Checked;
  174. else
  175. return DropdownMenuAction.Status.Normal;
  176. }
  177. private DropdownMenuAction.Status ViewModeMenuFun1(DropdownMenuAction action)
  178. {
  179. if (_viewMode == EViewMode.AssetView)
  180. return DropdownMenuAction.Status.Checked;
  181. else
  182. return DropdownMenuAction.Status.Normal;
  183. }
  184. private DropdownMenuAction.Status ViewModeMenuFun2(DropdownMenuAction action)
  185. {
  186. if (_viewMode == EViewMode.BundleView)
  187. return DropdownMenuAction.Status.Checked;
  188. else
  189. return DropdownMenuAction.Status.Normal;
  190. }
  191. private DropdownMenuAction.Status ViewModeMenuFun3(DropdownMenuAction action)
  192. {
  193. if (_viewMode == EViewMode.Redundancy)
  194. return DropdownMenuAction.Status.Checked;
  195. else
  196. return DropdownMenuAction.Status.Normal;
  197. }
  198. }
  199. }
  200. #endif