From 4f62b249b4a96cb37e5ab9bc00c59a9da136b253 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E5=86=A0=E5=B3=B0?= Date: Mon, 19 May 2025 16:25:16 +0800 Subject: [PATCH] update TableView MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 增加AssetObjectCell类 --- .../AssetArtReporterWindow.cs | 58 +++++++++++++++++-- .../Editor/AssetArtReporter/EHeaderType.cs | 5 ++ .../Editor/AssetArtReporter/ReportHeader.cs | 6 ++ .../AssetArtScanner/AssetArtScannerSetting.cs | 2 +- .../Editor/AssetArtScanner/ScannerResult.cs | 2 +- .../DefaultCells/AssetObjectCell.cs | 42 ++++++++++++++ .../DefaultCells/AssetObjectCell.cs.meta | 11 ++++ .../DefaultTableData/DefaultTableData.cs | 9 ++- 8 files changed, 125 insertions(+), 10 deletions(-) create mode 100644 Assets/YooAsset/Editor/UIElements/TableViewer/DefaultCells/AssetObjectCell.cs create mode 100644 Assets/YooAsset/Editor/UIElements/TableViewer/DefaultCells/AssetObjectCell.cs.meta diff --git a/Assets/YooAsset/Editor/AssetArtReporter/AssetArtReporterWindow.cs b/Assets/YooAsset/Editor/AssetArtReporter/AssetArtReporterWindow.cs index e246c7ca..610fd4e9 100644 --- a/Assets/YooAsset/Editor/AssetArtReporter/AssetArtReporterWindow.cs +++ b/Assets/YooAsset/Editor/AssetArtReporter/AssetArtReporterWindow.cs @@ -196,6 +196,32 @@ namespace YooAsset.Editor } } + /// + /// 导入单个报告对象 + /// + public void ImportSingleReprotFile(ScanReport report) + { + _reportCombiner = new ScanReportCombiner(); + + try + { + _reportCombiner.Combine(report); + + // 刷新页面 + RefreshToolbar(); + FillTableView(); + RebuildView(); + } + catch (System.Exception e) + { + _reportCombiner = null; + _titleLabel.text = "导入报告失败!"; + _descLabel.text = e.Message; + UnityEngine.Debug.LogError(e.StackTrace); + } + } + + private void ImportSingleBtn_clicked() { string selectFilePath = EditorUtility.OpenFilePanel("导入报告", _lastestOpenFolder, "json"); @@ -446,15 +472,31 @@ namespace YooAsset.Editor var column = new TableColumn(header.HeaderTitle, header.HeaderTitle, columnStyle); column.MakeCell = () => { - var label = new Label(); - label.style.marginLeft = 3f; - label.style.unityTextAlign = TextAnchor.MiddleLeft; - return label; + if (header.HeaderType == EHeaderType.AssetObject) + { + var objectFiled = new ObjectField(); + return objectFiled; + } + else + { + var label = new Label(); + label.style.marginLeft = 3f; + label.style.unityTextAlign = TextAnchor.MiddleLeft; + return label; + } }; column.BindCell = (VisualElement element, ITableData data, ITableCell cell) => { - var infoLabel = element as Label; - infoLabel.text = (string)cell.GetDisplayObject(); + if (header.HeaderType == EHeaderType.AssetObject) + { + var objectFiled = element as ObjectField; + objectFiled.value = (UnityEngine.Object)cell.GetDisplayObject(); + } + else + { + var infoLabel = element as Label; + infoLabel.text = (string)cell.GetDisplayObject(); + } }; _elementTableView.AddColumn(column); } @@ -480,6 +522,10 @@ namespace YooAsset.Editor { tableData.AddAssetPathCell(scanInfo.HeaderTitle, scanInfo.ScanInfo); } + else if (header.HeaderType == EHeaderType.AssetObject) + { + tableData.AddAssetObjectCell(scanInfo.HeaderTitle, scanInfo.ScanInfo); + } else if (header.HeaderType == EHeaderType.StringValue) { tableData.AddStringValueCell(scanInfo.HeaderTitle, scanInfo.ScanInfo); diff --git a/Assets/YooAsset/Editor/AssetArtReporter/EHeaderType.cs b/Assets/YooAsset/Editor/AssetArtReporter/EHeaderType.cs index 3e3ee17f..009c7189 100644 --- a/Assets/YooAsset/Editor/AssetArtReporter/EHeaderType.cs +++ b/Assets/YooAsset/Editor/AssetArtReporter/EHeaderType.cs @@ -8,6 +8,11 @@ namespace YooAsset.Editor /// AssetPath, + /// + /// 资源对象 + /// + AssetObject, + /// /// 字符串 /// diff --git a/Assets/YooAsset/Editor/AssetArtReporter/ReportHeader.cs b/Assets/YooAsset/Editor/AssetArtReporter/ReportHeader.cs index ca194dde..2109e101 100644 --- a/Assets/YooAsset/Editor/AssetArtReporter/ReportHeader.cs +++ b/Assets/YooAsset/Editor/AssetArtReporter/ReportHeader.cs @@ -126,6 +126,12 @@ namespace YooAsset.Editor if (string.IsNullOrEmpty(guid)) throw new Exception($"{HeaderTitle} value is invalid asset path : {value}"); } + else if (HeaderType == EHeaderType.AssetObject) + { + string guid = AssetDatabase.AssetPathToGUID(value); + if (string.IsNullOrEmpty(guid)) + throw new Exception($"{HeaderTitle} value is invalid asset object : {value}"); + } else if (HeaderType == EHeaderType.DoubleValue) { if (double.TryParse(value, out double doubleValue) == false) diff --git a/Assets/YooAsset/Editor/AssetArtScanner/AssetArtScannerSetting.cs b/Assets/YooAsset/Editor/AssetArtScanner/AssetArtScannerSetting.cs index f82c10ef..dd54aa6c 100644 --- a/Assets/YooAsset/Editor/AssetArtScanner/AssetArtScannerSetting.cs +++ b/Assets/YooAsset/Editor/AssetArtScanner/AssetArtScannerSetting.cs @@ -46,7 +46,7 @@ namespace YooAsset.Editor } catch (Exception e) { - return new ScannerResult(e.Message); + return new ScannerResult(e.StackTrace); } } diff --git a/Assets/YooAsset/Editor/AssetArtScanner/ScannerResult.cs b/Assets/YooAsset/Editor/AssetArtScanner/ScannerResult.cs index 0e4a9c34..94b71fd4 100644 --- a/Assets/YooAsset/Editor/AssetArtScanner/ScannerResult.cs +++ b/Assets/YooAsset/Editor/AssetArtScanner/ScannerResult.cs @@ -52,7 +52,7 @@ namespace YooAsset.Editor if (Succeed) { var reproterWindow = AssetArtReporterWindow.OpenWindow(); - reproterWindow.ImportSingleReprotFile(ReprotFilePath); + reproterWindow.ImportSingleReprotFile(Report); } } } diff --git a/Assets/YooAsset/Editor/UIElements/TableViewer/DefaultCells/AssetObjectCell.cs b/Assets/YooAsset/Editor/UIElements/TableViewer/DefaultCells/AssetObjectCell.cs new file mode 100644 index 00000000..5248b598 --- /dev/null +++ b/Assets/YooAsset/Editor/UIElements/TableViewer/DefaultCells/AssetObjectCell.cs @@ -0,0 +1,42 @@ +#if UNITY_2019_4_OR_NEWER +using UnityEditor; +using System; + +namespace YooAsset.Editor +{ + public class AssetObjectCell : ITableCell, IComparable + { + public string SearchTag { private set; get; } + public object CellValue { set; get; } + public string StringValue + { + get + { + return (string)CellValue; + } + } + + public AssetObjectCell(string searchTag, string assetPath) + { + SearchTag = searchTag; + CellValue = assetPath; + } + + public object GetDisplayObject() + { + return AssetDatabase.LoadMainAssetAtPath(StringValue); + } + public int CompareTo(object other) + { + if (other is AssetObjectCell cell) + { + return this.StringValue.CompareTo(cell.StringValue); + } + else + { + return 0; + } + } + } +} +#endif \ No newline at end of file diff --git a/Assets/YooAsset/Editor/UIElements/TableViewer/DefaultCells/AssetObjectCell.cs.meta b/Assets/YooAsset/Editor/UIElements/TableViewer/DefaultCells/AssetObjectCell.cs.meta new file mode 100644 index 00000000..59ffb0bf --- /dev/null +++ b/Assets/YooAsset/Editor/UIElements/TableViewer/DefaultCells/AssetObjectCell.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 39db4a569a0f69443a7675e19c99c389 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Editor/UIElements/TableViewer/DefaultTableData/DefaultTableData.cs b/Assets/YooAsset/Editor/UIElements/TableViewer/DefaultTableData/DefaultTableData.cs index 90946248..acc35f63 100644 --- a/Assets/YooAsset/Editor/UIElements/TableViewer/DefaultTableData/DefaultTableData.cs +++ b/Assets/YooAsset/Editor/UIElements/TableViewer/DefaultTableData/DefaultTableData.cs @@ -31,9 +31,14 @@ namespace YooAsset.Editor var cell = new ButtonCell(searchTag); Cells.Add(cell); } - public void AddAssetPathCell(string searchTag, string path) + public void AddAssetPathCell(string searchTag, string assetPath) { - var cell = new AssetPathCell(searchTag, path); + var cell = new AssetPathCell(searchTag, assetPath); + Cells.Add(cell); + } + public void AddAssetObjectCell(string searchTag, string assetPath) + { + var cell = new AssetObjectCell(searchTag, assetPath); Cells.Add(cell); } public void AddStringValueCell(string searchTag, string value)