From 5259a1ec8bfcd4b3d3c7892f33c5f35d55a03eb9 Mon Sep 17 00:00:00 2001 From: coffee <985942825@qq.com> Date: Sun, 26 Jan 2025 02:43:47 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E7=94=A8md5=E6=A3=80=E6=B5=8B?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E6=98=AF=E5=90=A6=E6=9C=89=E6=94=B9=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Editor/ExcelResolverEditorConfig.cs | 8 ++-- .../ExcelResolverEditorWindow.ReadExcel.cs | 36 ++++++++++++++---- .../ExcelResolverEditorWindow.WriteSOData.cs | 5 --- .../Editor/ExcelResolverEditorWindow.cs | 14 +++++-- Assets/_Project/ExcelResolver/Excel/hero.xlsx | Bin 11076 -> 11075 bytes .../ScriptableObject/Excel/Hero_3.asset | 2 +- 6 files changed, 46 insertions(+), 19 deletions(-) diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorConfig.cs b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorConfig.cs index 7abbe8b..083b0dc 100644 --- a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorConfig.cs +++ b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorConfig.cs @@ -1,11 +1,11 @@ -using Sirenix.OdinInspector; +using System.Collections.Generic; +using Sirenix.OdinInspector; using Tools.Editor; -using UnityEngine; namespace Tools.ExcelResolver.Editor { [InlineEditor(InlineEditorObjectFieldModes.CompletelyHidden)] - public sealed class ExcelResolverEditorConfig : ScriptableObject + public sealed class ExcelResolverEditorConfig : SerializedScriptableObject { [LabelText("Excel路径"), FolderPath] public string ExcelPathRoot = "Assets/_Project/ExcelResolver/Excel"; @@ -16,6 +16,8 @@ namespace Tools.ExcelResolver.Editor [LabelText("生成代码命名空间")] public string GenerateDataClassNameSpace = "Tools.ExcelResolver"; + public Dictionary md5Dict = new(); + public void MakeSureDirectory() { DirectoryUtil.MakeSureDirectory(ExcelPathRoot); diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs index 6194950..ac02de0 100644 --- a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs +++ b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; +using System.Security.Cryptography; using OfficeOpenXml; using UnityEditor; using UnityEditor.Compilation; @@ -12,16 +13,32 @@ namespace Tools.ExcelResolver.Editor { public sealed partial class ExcelResolverEditorWindow { - private void ReadExcel(bool needWrite = true) + private void ReadExcel() { classCodeDataDict = new Dictionary(); // 获取Excel文件 excelResolverConfig.MakeSureDirectory(); var excelFiles = new DirectoryInfo(excelResolverConfig.ExcelPathRoot).GetFiles("*.xlsx").Where(f => !f.Name.StartsWith("~$")); + if (excelFiles.Count() == 0) + { + Debug.LogError("未检测到Excel文件,请检查路径"); + return; + } + foreach (var excelFile in excelFiles) { using FileStream stream = File.Open(excelFile.FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); + using MD5 md5 = MD5.Create(); + byte[] hash = md5.ComputeHash(stream);// 转换为十六进制字符串 + var m = BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant(); + if (excelResolverConfig.md5Dict.GetValueOrDefault(excelFile.FullName) == m) + { + Debug.Log($"'{excelFile.Name}' 文件未发生变化,跳过"); + continue; + } + excelResolverConfig.md5Dict[excelFile.FullName] = m; + using ExcelPackage package = new ExcelPackage(stream); ExcelWorksheet worksheet = package.Workbook.Worksheets["Sheet1"]; if (null == worksheet) @@ -35,22 +52,27 @@ namespace Tools.ExcelResolver.Editor classCodeData.fields = GetFieldData(worksheet, classCodeData); classCodeData.tableType = CheckTableType(worksheet, classCodeData); - if (needWrite) - { - WriteDataCode(classCodeData); - WriteSOCode(classCodeData); - } + WriteDataCode(classCodeData); + WriteSOCode(classCodeData); classCodeDataDict.Add(worksheet, classCodeData); - // WriteSOData(worksheet, classCodeData); + Debug.Log($"读取Excel文件:'{excelFile.Name}',并生成代码"); + } + + if (classCodeDataDict.Count == 0) + { + Debug.LogError("未检测到Excel文件改动,如需重新生成,请清空md5Dict"); + return; } AssetDatabase.Refresh(); if (EditorApplication.isCompiling) { + Debug.Log("代码成功生成,请等待编译..."); CompilationPipeline.compilationFinished += CompilationFinished; } else { + Debug.Log("未更改过字段,开始写入SO数据"); WriteSOData(); } } diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteSOData.cs b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteSOData.cs index 563fd77..b641564 100644 --- a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteSOData.cs +++ b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteSOData.cs @@ -15,11 +15,6 @@ namespace Tools.ExcelResolver.Editor private void WriteSOData() { - if (classCodeDataDict == null) - { - ReadExcel(false); - } - foreach (var classCodeDataDictPair in classCodeDataDict) { var worksheet = classCodeDataDictPair.Key; diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.cs b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.cs index f19494e..299734d 100644 --- a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.cs +++ b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.cs @@ -43,18 +43,26 @@ namespace Tools.ExcelResolver.Editor } } - [FoldoutGroup("Hide Setting")] - [Button(SdfIconType.ExclamationDiamond, "删除所有生成的代码和SO"), GUIColor(1f, 0f, 0f)] - public void DeleteAllScriptsAndSO() + [Button("删除所有生成的代码和SO", ButtonSizes.Gigantic, Icon = SdfIconType.ExclamationDiamond), GUIColor(1f, 0f, 0f)] + [ButtonGroup("Hide Setting/Button")] + private void DeleteAllScriptsAndSO() { if (EditorUtility.DisplayDialog("警告", "确定要删除所有生成的代码和SO吗?", "确定", "取消")) { DirectoryUtil.DeleteDirectory(excelResolverConfig.CodePathRoot); DirectoryUtil.DeleteDirectory(excelResolverConfig.SOPathRoot); + + excelResolverConfig.md5Dict.Clear(); AssetDatabase.Refresh(); } } + [ButtonGroup("Hide Setting/Button")] + private void ClearMd5() + { + excelResolverConfig.md5Dict.Clear(); + } + [OnInspectorGUI] private void DrawGenerateButton() { diff --git a/Assets/_Project/ExcelResolver/Excel/hero.xlsx b/Assets/_Project/ExcelResolver/Excel/hero.xlsx index e04fe511c62932d6878665189d12924082266689..fd86a46ed833d95792c1a0b879faa180d58c29dc 100644 GIT binary patch delta 1750 zcmV;{1}XW(R>M}Xo&g2hQ0o?6lcNDFe=(KNb)d2<2Z9yFyO8|difvMo%x>4dfuQ%k zgzSN~_b_d@x}kWPob!J<=O^)aSr*<4Xp<{BLL>;02a+q1%h?FsrxX7IdB!p+SfM10 z&GNNYYSVjnLfMiehZ|97<*a=a5d!lrEWdM?J$8f8)<= z1~>}CGhBjYf?0+epkMVwv_lHsBddijT7cjf3MfHZgGoT}kJo}O&7T9Ua^Ng;yQ*BL zUED*q;GNjJmnQFxbzKMbppD`36Z|;6xofNXxomdD0VT2ElxtvC>4d8+15lY%W-((r z#s^xn$ATFi?*NLQ`6@YJM>=O1C%?l%Pbc3a4)v}fi5MqINZ>N4KfU;ITCu$!e~a&! zxEZXqs^>$A4xbTxR4_O04NYEJbCn}=B&{>_8bpd_g>Le8jXwc#42wJX zfzN&v%dH9`tmetGf6U0@)bOIRiVqF41}0(iYszToxXjgOlR|;7i8-4beduB?y_S&E zRR3a)Uq(8N7l^-olBFN6HRc{(NkBYCj$jpC%PnxA^eqRjVW^XH7l546^_YJna}oqo zeQSZQ(tnF2`8A|4MUIcxRla3mo3Dv>Bq#S8usIF>@sI2>f7M5NHTD
VJF7!=br z9&%ET2EYKHTIlC?*0s=m=e6=^%QpJsA%QMU|`9T4Aq>f{QAuZw%X#K`p!; za8b3Rf3HT9e@j-FA-CsjlF&?pTNkah8*6NV-@F|AMS#HzDU9A` zor!q^V|nlggn|{?*2?-IXa!o(T7tGn{Mba;GGg9DbY+CoMD%3DqKSBr5z8i`FC(6s zh=Gh)H4#G@v2G$pGGfz2ShW&G%eD##>grAbL2cbDe;}x@&k6`??27_YcUCeE+&KTk zI09W82kG&sfFMEU3J6lfX@@Kn5Tx2t0YSB_+9B&E#75e06cD8SRsliU?-UTE{ayh< z+CM8Gwf2QoUlfp9M#&zqL$=zZEA|zE7WS}FzaJG4r2Sk0LBcvs2+o2oi0hfS_`>?U0=Uf^^+0Aa`_yM_8+_LRJA5vUY1(CA;+7X?ucJfNNT0 z1xEp?tsrF{KxY2@w8xfs(mf6!+iiwqoda0p>>*n?(jiayUE#)QY|1S;OZD)xP%{qifcyWVifkG17&dLtG->}=uO}b>lpA< zJ5kE2FK}$id0z>;##-#gBzg6J!bu-Wril-S?BZ-a)nl5l#PwNjNKUpaSn{)+_%UGi zAG2NwJ_-fwM-C}Rv!N4K0uZU3?+4sMZvXFUmi%9Pe*v=w7QYYy_LIgYKm<@C005Jq zC>E0-CmI2ClRGDq1=~>T7G9InCsY9)lPD-a2X_Pj0C;RKlOQS_lZz-00i2VXC^iAZ zlhG(G8|+68DMtbT0PY0<02BZK000000096X0001tlNl*N0Tq*5DLMf>la?tq0%Hx6 zfejUt<0&cu1(OacJOP-KODZ884lj=cVgvvHQ4jzC7ytkO000000RSKX006`Uli>s! slcFjr0$d4`;RF?vj|l~n=qf4#Obe6Y1QnBi3k8!dD-Z^nCIA2c04eko$N&HU delta 1743 zcmV;=1~B=W4Yo&g2WrG&3vlcNDFf7vlY*MZ8e90*Pn??Uo-E4E2VGPhm(27=!E z60!%{-ov!r>W1QFa?bzdoS!74Ratm1piQpi5Ro869!Rc4E@wk@KOOr6Q@Ui<9rX-Xe~dq~ z8Q>@k`?v(l1hWj+K)>pUXpa=ULsko2GyuUd6i|Y+29to`AFl;nnm-2`<;Yp)c3rtn z`?$w!!CSF&uT0(@_i5eu5t-H+M}{KbQ5cIG{8UoN^7!DxGqbWdJIZ$}DC~ zC-_LK_gFAvCvN3g4&rj1?%qCjQSYDI&DVDGn&98MLpM!YJ_yfcqivIe^3c1wo{mu( zg;CEBW1mD*LMVx87(Ug{pUl@;+lz7^;(uc7hs2NKDe2RT0gdA$;sKC0xljK``VF%k z1GNDO^q~pmV*~&IPm|jOA%EL)qc{+K->UrwiuVD79pB3K)WnzgnoMnGcAqhpZ7P6R zkWFU3ejCY%sF8=+hd5X|eY)v$5Rylq-=omDk~9lwJT@JxWf~;*=^=(%x^+kc7(u^LN<-Xf*SfXHG_3fv>4O865)XVj;be zlH=I?;tXE~CX92$-vP<957!3s_OB!)J|hRPifI%U*i-se09P>7D!4hIVDx+zT*;J# z;n>_2F8Y_}fJ;bV%M2f{%WMm7ny;yGAV=>KvMCM!2@dQ$Hh%|ZIrbOLmn1ly8I;nt z9tu*QhQI)yMidlgHjT)87nO==$F;idgK7A@8#hYl7Ak_=TM+!uZ$VJ|F9IBRVniCa zC_@HTLmEdGSM*UNa$UHMU#2RHbE@jxfz|Fcgtf~G;iAmdX{@kQM!`iH)wTLf$)Fa| z4!9`W(Y;rrEq^5AW+==#8KpEg;K7Biz>)%=qVvKKVmR@N)y5e*;5NU&evx4CLI$JP zNo!Wc($swB@=Y(b66+>i44tg0!D%AV}C*9fGw1ozO zL|bYgNPo1I27*LeYapoHO*3SxfgoLX8ps`8;T6`XtCUrOrL65rR>dyeX4;OVmEejN zSz)GuR8~+j_aL))f4W0QzUdx&knK7_vQ7akb9Rs|X38XroC`h_vbbewq4B34-+&cw z@}+>_g=2M#w2-UTN)c#sqf8>RZIwx6vz;=D+<)_|Ojf=TONKIeNBv?eTxw9kPDYL$oXwr=Ka4sOGtt z+;dh`_d?|Aqv0oo4|Q;Pi%~Z!D>3R=DEnHWLY~L&TnRo31sy^{Kt{8l6IKEb$;tNvZXvh-cQs4?uf4ys1s1;$0r!)|CO`yHA^-rB zpC}fSA14|Cb(1-$%S}8gKK9iLxHUec0 zlYb2rlj12V0S1!|Dm($1lS(Qf9Q2_H