diff --git a/Assets/YooAsset/Editor/AssetBundleReporter/AssetBundleReporterWindow.cs b/Assets/YooAsset/Editor/AssetBundleReporter/AssetBundleReporterWindow.cs index f2b4fb8..2e64bd0 100644 --- a/Assets/YooAsset/Editor/AssetBundleReporter/AssetBundleReporterWindow.cs +++ b/Assets/YooAsset/Editor/AssetBundleReporter/AssetBundleReporterWindow.cs @@ -21,6 +21,11 @@ namespace YooAsset.Editor /// private enum EShowMode { + /// + /// 概览 + /// + Summary, + /// /// 资源对象列表显示模式 /// @@ -33,6 +38,7 @@ namespace YooAsset.Editor } private ToolbarMenu _showModeMenu; + private SummaryReporterViewer _summaryViewer; private AssetListReporterViewer _assetListViewer; private BundleListReporterViewer _bundleListViewer; @@ -62,13 +68,18 @@ namespace YooAsset.Editor // 显示模式菜单 _showModeMenu = root.Q("ShowModeMenu"); - _showModeMenu.menu.AppendAction(EShowMode.AssetList.ToString(), ShowModeMenuAction1); - _showModeMenu.menu.AppendAction(EShowMode.BundleList.ToString(), ShowModeMenuAction2); + _showModeMenu.menu.AppendAction(EShowMode.Summary.ToString(), ShowModeMenuAction0, ShowModeMenuFun0); + _showModeMenu.menu.AppendAction(EShowMode.AssetList.ToString(), ShowModeMenuAction1, ShowModeMenuFun1); + _showModeMenu.menu.AppendAction(EShowMode.BundleList.ToString(), ShowModeMenuAction2, ShowModeMenuFun2); // 搜索栏 var searchField = root.Q("SearchField"); searchField.RegisterValueChangedCallback(OnSearchKeyWordChange); + // 加载页面 + _summaryViewer = new SummaryReporterViewer(); + _summaryViewer.InitViewer(); + // 加载页面 _assetListViewer = new AssetListReporterViewer(); _assetListViewer.InitViewer(); @@ -78,9 +89,9 @@ namespace YooAsset.Editor _bundleListViewer.InitViewer(); // 初始页面 - _showMode = EShowMode.AssetList; - _showModeMenu.text = EShowMode.AssetList.ToString(); - _assetListViewer.AttachParent(root); + _showMode = EShowMode.Summary; + _showModeMenu.text = EShowMode.Summary.ToString(); + _summaryViewer.AttachParent(root); } private void ImportBtn_onClick() @@ -93,6 +104,7 @@ namespace YooAsset.Editor _buildReport = BuildReport.Deserialize(jsonData); _assetListViewer.FillViewData(_buildReport, _searchKeyWord); _bundleListViewer.FillViewData(_buildReport, _searchKeyWord); + _summaryViewer.FillViewData(_buildReport); } private void OnSearchKeyWordChange(ChangeEvent e) { @@ -103,6 +115,18 @@ namespace YooAsset.Editor _bundleListViewer.FillViewData(_buildReport, _searchKeyWord); } } + private void ShowModeMenuAction0(DropdownMenuAction action) + { + if (_showMode != EShowMode.Summary) + { + _showMode = EShowMode.Summary; + VisualElement root = this.rootVisualElement; + _showModeMenu.text = EShowMode.Summary.ToString(); + _summaryViewer.AttachParent(root); + _assetListViewer.DetachParent(); + _bundleListViewer.DetachParent(); + } + } private void ShowModeMenuAction1(DropdownMenuAction action) { if (_showMode != EShowMode.AssetList) @@ -110,8 +134,9 @@ namespace YooAsset.Editor _showMode = EShowMode.AssetList; VisualElement root = this.rootVisualElement; _showModeMenu.text = EShowMode.AssetList.ToString(); - _bundleListViewer.DetachParent(); + _summaryViewer.DetachParent(); _assetListViewer.AttachParent(root); + _bundleListViewer.DetachParent(); } } private void ShowModeMenuAction2(DropdownMenuAction action) @@ -121,10 +146,32 @@ namespace YooAsset.Editor _showMode = EShowMode.BundleList; VisualElement root = this.rootVisualElement; _showModeMenu.text = EShowMode.BundleList.ToString(); + _summaryViewer.DetachParent(); _assetListViewer.DetachParent(); _bundleListViewer.AttachParent(root); } } + private DropdownMenuAction.Status ShowModeMenuFun0(DropdownMenuAction action) + { + if (_showMode == EShowMode.Summary) + return DropdownMenuAction.Status.Checked; + else + return DropdownMenuAction.Status.Normal; + } + private DropdownMenuAction.Status ShowModeMenuFun1(DropdownMenuAction action) + { + if (_showMode == EShowMode.AssetList) + return DropdownMenuAction.Status.Checked; + else + return DropdownMenuAction.Status.Normal; + } + private DropdownMenuAction.Status ShowModeMenuFun2(DropdownMenuAction action) + { + if (_showMode == EShowMode.BundleList) + return DropdownMenuAction.Status.Checked; + else + return DropdownMenuAction.Status.Normal; + } } } #endif \ No newline at end of file diff --git a/Assets/YooAsset/Editor/AssetBundleReporter/VisualViewers/SummaryReporterViewer.cs b/Assets/YooAsset/Editor/AssetBundleReporter/VisualViewers/SummaryReporterViewer.cs new file mode 100644 index 0000000..9315d79 --- /dev/null +++ b/Assets/YooAsset/Editor/AssetBundleReporter/VisualViewers/SummaryReporterViewer.cs @@ -0,0 +1,146 @@ +#if UNITY_2019_4_OR_NEWER +using System.IO; +using System.Linq; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; +using UnityEditor.UIElements; +using UnityEngine.UIElements; + +namespace YooAsset.Editor +{ + internal class SummaryReporterViewer + { + private class ItemWrapper + { + public string Title { private set; get; } + public string Value { private set; get; } + + public ItemWrapper(string title, string value) + { + Title = title; + Value = value; + } + } + + private VisualTreeAsset _visualAsset; + private TemplateContainer _root; + + private ListView _listView; + private BuildReport _buildReport; + private readonly List _items = new List(); + + + /// + /// 初始化页面 + /// + public void InitViewer() + { + // 加载布局文件 + string rootPath = EditorTools.GetYooAssetPath(); + string uxml = $"{rootPath}/Editor/AssetBundleReporter/VisualViewers/SummaryReporterViewer.uxml"; + _visualAsset = AssetDatabase.LoadAssetAtPath(uxml); + if (_visualAsset == null) + { + Debug.LogError($"Not found {nameof(SummaryReporterViewer)}.uxml : {uxml}"); + return; + } + _root = _visualAsset.CloneTree(); + _root.style.flexGrow = 1f; + + // 概述列表 + _listView = _root.Q("ListView"); + _listView.makeItem = MakeListViewItem; + _listView.bindItem = BindListViewItem; + } + + /// + /// 填充页面数据 + /// + public void FillViewData(BuildReport buildReport) + { + _buildReport = buildReport; + _listView.Clear(); + _items.Clear(); + + _items.Add(new ItemWrapper("引擎版本", buildReport.Summary.UnityVersion)); + _items.Add(new ItemWrapper("构建时间", buildReport.Summary.BuildTime)); + _items.Add(new ItemWrapper("构建耗时", $"{buildReport.Summary.BuildSeconds}秒")); + _items.Add(new ItemWrapper("构建平台", $"{buildReport.Summary.BuildTarget}")); + _items.Add(new ItemWrapper("构建版本", $"{buildReport.Summary.BuildVersion}")); + + _items.Add(new ItemWrapper("开启自动分包", $"{buildReport.Summary.ApplyRedundancy}")); + _items.Add(new ItemWrapper("开启资源包后缀名", $"{buildReport.Summary.AppendFileExtension}")); + + _items.Add(new ItemWrapper("自动收集着色器", $"{buildReport.Summary.IsCollectAllShaders}")); + _items.Add(new ItemWrapper("着色器资源包名称", $"{buildReport.Summary.ShadersBundleName}")); + + _items.Add(new ItemWrapper("高级构建选项", $"---------------------------------")); + _items.Add(new ItemWrapper("IsForceRebuild", $"{buildReport.Summary.IsForceRebuild}")); + _items.Add(new ItemWrapper("BuildinTags", $"{buildReport.Summary.BuildinTags}")); + _items.Add(new ItemWrapper("CompressOption", $"{buildReport.Summary.CompressOption}")); + _items.Add(new ItemWrapper("IsAppendHash", $"{buildReport.Summary.IsAppendHash}")); + _items.Add(new ItemWrapper("IsDisableWriteTypeTree", $"{buildReport.Summary.IsDisableWriteTypeTree}")); + _items.Add(new ItemWrapper("IsIgnoreTypeTreeChanges", $"{buildReport.Summary.IsIgnoreTypeTreeChanges}")); + _items.Add(new ItemWrapper("IsDisableLoadAssetByFileName", $"{buildReport.Summary.IsDisableLoadAssetByFileName}")); + } + + /// + /// 挂接到父类页面上 + /// + public void AttachParent(VisualElement parent) + { + parent.Add(_root); + } + + /// + /// 从父类页面脱离开 + /// + public void DetachParent() + { + _root.RemoveFromHierarchy(); + } + + // 列表相关 + private VisualElement MakeListViewItem() + { + VisualElement element = new VisualElement(); + element.style.flexDirection = FlexDirection.Row; + + { + var label = new Label(); + label.name = "Label1"; + label.style.unityTextAlign = TextAnchor.MiddleLeft; + label.style.marginLeft = 3f; + //label.style.flexGrow = 1f; + label.style.width = 100; + element.Add(label); + } + + { + var label = new Label(); + label.name = "Label2"; + label.style.unityTextAlign = TextAnchor.MiddleLeft; + label.style.marginLeft = 3f; + label.style.flexGrow = 1f; + label.style.width = 150; + element.Add(label); + } + + return element; + } + private void BindListViewItem(VisualElement element, int index) + { + var itemWrapper = _items[index]; + + // Title + var label1 = element.Q