From 5fdfc137833ce8abd45343e59adbf0973aca700a Mon Sep 17 00:00:00 2001 From: coffee <985942825@qq.com> Date: Sat, 25 Jan 2025 19:31:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AD=97=E5=85=B8=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sirenix/GlobalSerializationConfig.asset | 2 +- .../Core/Editor/UnityEditorUtil.cs | 20 ++++++ .../Core/Editor/UnityEditorUtil.cs.meta | 3 + .../ExcelResolver/Editor/Core/Types/TDict.cs | 66 ++++++++++++++++++ .../Editor/Core/Types/TDict.cs.meta | 3 + .../Core/Util/ExcelResolverUtil.Cell.cs | 6 +- ...ExcelResolverEditorWindow.WriteDataCode.cs | 9 ++- ...ExcelResolverEditorWindow.WriteUtilCode.cs | 2 +- .../Editor/ExcelResolverEditorWindow.cs | 13 +++- .../{IExcelData.cs => IExcelSOData.cs} | 2 +- ...ExcelData.cs.meta => IExcelSOData.cs.meta} | 0 .../{IExcelSO.cs => IExcelSOUtil.cs} | 2 +- ...{IExcelSO.cs.meta => IExcelSOUtil.cs.meta} | 0 Assets/_Project/ExcelResolver/Excel/hero.xlsx | Bin 10876 -> 10964 bytes .../ScriptableObject/Excel/Hero_1.asset | 61 ++++++++++++++-- .../ScriptableObject/Excel/Hero_2.asset | 29 ++++++++ .../ScriptableObject/Excel/Hero_3.asset | 43 +++++++++++- .../_Project/Scripts/Generator/Excel/Hero.cs | 10 ++- .../Scripts/Generator/Excel/HeroUtil.cs | 2 +- 19 files changed, 256 insertions(+), 17 deletions(-) create mode 100644 Assets/Unity-Tools/Core/Editor/UnityEditorUtil.cs create mode 100644 Assets/Unity-Tools/Core/Editor/UnityEditorUtil.cs.meta create mode 100644 Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TDict.cs create mode 100644 Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TDict.cs.meta rename Assets/Unity-Tools/ExcelResolver/Interface/{IExcelData.cs => IExcelSOData.cs} (61%) rename Assets/Unity-Tools/ExcelResolver/Interface/{IExcelData.cs.meta => IExcelSOData.cs.meta} (100%) rename Assets/Unity-Tools/ExcelResolver/Interface/{IExcelSO.cs => IExcelSOUtil.cs} (61%) rename Assets/Unity-Tools/ExcelResolver/Interface/{IExcelSO.cs.meta => IExcelSOUtil.cs.meta} (100%) diff --git a/Assets/Plugins/Sirenix/Odin Inspector/Config/Resources/Sirenix/GlobalSerializationConfig.asset b/Assets/Plugins/Sirenix/Odin Inspector/Config/Resources/Sirenix/GlobalSerializationConfig.asset index 0e48b68..185befc 100644 --- a/Assets/Plugins/Sirenix/Odin Inspector/Config/Resources/Sirenix/GlobalSerializationConfig.asset +++ b/Assets/Plugins/Sirenix/Odin Inspector/Config/Resources/Sirenix/GlobalSerializationConfig.asset @@ -12,7 +12,7 @@ MonoBehaviour: m_Script: {fileID: 1549551891, guid: 74721b9f0af448f5ae2e91102a1a5edd, type: 3} m_Name: GlobalSerializationConfig m_EditorClassIdentifier: - HideSerializationCautionaryMessage: 0 + HideSerializationCautionaryMessage: 1 HidePrefabCautionaryMessage: 0 HideOdinSerializeAttributeWarningMessages: 0 HideNonSerializedShowInInspectorWarningMessages: 0 diff --git a/Assets/Unity-Tools/Core/Editor/UnityEditorUtil.cs b/Assets/Unity-Tools/Core/Editor/UnityEditorUtil.cs new file mode 100644 index 0000000..ff7c6cb --- /dev/null +++ b/Assets/Unity-Tools/Core/Editor/UnityEditorUtil.cs @@ -0,0 +1,20 @@ +using System.Reflection; + +namespace Tools.Editor +{ + public static class UnityEditorUtil + { + static MethodInfo clearMethod; + + public static void ClearConsole() + { + if (clearMethod == null) + { + Assembly assembly = Assembly.GetAssembly(typeof(UnityEditor.Editor)); + System.Type logEntries = assembly.GetType("UnityEditor.LogEntries"); + clearMethod = logEntries.GetMethod("Clear"); + } + clearMethod.Invoke(new object(), null); + } + } +} \ No newline at end of file diff --git a/Assets/Unity-Tools/Core/Editor/UnityEditorUtil.cs.meta b/Assets/Unity-Tools/Core/Editor/UnityEditorUtil.cs.meta new file mode 100644 index 0000000..b33b363 --- /dev/null +++ b/Assets/Unity-Tools/Core/Editor/UnityEditorUtil.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b4f042c2bcf24f2494edc41df37ff88f +timeCreated: 1737803701 \ No newline at end of file diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TDict.cs b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TDict.cs new file mode 100644 index 0000000..a51d963 --- /dev/null +++ b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TDict.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Tools.ExcelResolver.Editor +{ + internal class TDict : TType + { + internal override Type RealType => typeof(Dictionary<,>).MakeGenericType(KeyType?.RealType ?? typeof(object), ValueType?.RealType ?? typeof(object)); + internal override string FieldWriteFormat => $"Dictionary<{KeyType?.RealType.Name ?? "object"}, {ValueType?.RealType.Name ?? "object"}>"; + internal override object DefaultValue => Activator.CreateInstance(typeof(Dictionary<,>).MakeGenericType(KeyType?.RealType ?? typeof(object), ValueType?.RealType ?? typeof(object))); + + // 键和值的类型 + internal TType KeyType { get; set; } + internal TType ValueType { get; set; } + + internal override bool String2TType(string typeText) + { + var split = typeText.Split(',', StringSplitOptions.RemoveEmptyEntries); + if (split.Length != 3 || !string.Equals(split[0], "dict", StringComparison.OrdinalIgnoreCase)) + { + return false; + } + + // 解析键和值的类型 + KeyType = ExcelResolverUtil.GetTTypeByString(split[1]); + ValueType = ExcelResolverUtil.GetTTypeByString(split[2]); + + return KeyType != null && ValueType != null; + } + + internal override object TryParseFrom(string cellText) + { + if (KeyType == null || ValueType == null) + { + return null; // 如果未指定键和值类型,无法解析 + } + + var dict = (IDictionary)Activator.CreateInstance(typeof(Dictionary<,>).MakeGenericType(KeyType.RealType, ValueType.RealType)); + var entries = cellText.Split('|'); // 假定每个键值对用 "|" 分隔 + + foreach (var entry in entries) + { + var keyValue = entry.Split(':'); // 假定键和值用 ":" 分隔 + if (keyValue.Length != 2) + { + return null; // 任意键值对格式不正确时,返回 null + } + + var key = KeyType.TryParseFrom(keyValue[0]); + var value = ValueType.TryParseFrom(keyValue[1]); + + if (key != null && value != null) + { + dict.Add(key, value); + } + else + { + return null; // 键或值解析失败时,返回 null + } + } + + return dict; + } + } +} diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TDict.cs.meta b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TDict.cs.meta new file mode 100644 index 0000000..81bb979 --- /dev/null +++ b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TDict.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ee795236344b4595bafcdb6222b93798 +timeCreated: 1737802386 \ No newline at end of file diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Cell.cs b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Cell.cs index fca0594..1a5048d 100644 --- a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Cell.cs +++ b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Cell.cs @@ -64,7 +64,11 @@ namespace Tools.ExcelResolver.Editor return result; } - throw new Exception($"单元格转换失败 className: '{className}' FullAddress: {cell.FullAddress} Text: '{cell.Text}'"); + throw new Exception($"单元格转换失败 " + + $"className: '{className}' " + + $"FullAddress: {cell.FullAddress} " + + $"Type: '{type.FieldWriteFormat}' " + + $"Text: '{cell.Text}' "); } /// diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataCode.cs b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataCode.cs index b01df57..3d867e1 100644 --- a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataCode.cs +++ b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataCode.cs @@ -3,7 +3,9 @@ using System.CodeDom.Compiler; using System.IO; using Microsoft.CSharp; -/* 使用CodeCompileUnit需要将Edit->Project Settings->Player->Other Settings->Api Compatibility Level改为.NET 4.x(或.NET Framework) */ +/* 使用CodeCompileUnit需要将Edit->Project Settings->Player->Other Settings->Api Compatibility Level改为.NET 4.x(或.NET Framework) + 更正:如果使用了程序集才需要如上设置,否则不需要 + */ namespace Tools.ExcelResolver.Editor @@ -30,6 +32,7 @@ namespace Tools.ExcelResolver.Editor "System.Collections", "System.Collections.Generic", "UnityEngine", + "Sirenix.OdinInspector", }; foreach (var import in classImports) { @@ -50,8 +53,8 @@ namespace Tools.ExcelResolver.Editor // }, BaseTypes = { - new CodeTypeReference("ScriptableObject"), - new CodeTypeReference("IExcelData") + new CodeTypeReference("SerializedScriptableObject"), + new CodeTypeReference("IExcelSOData") } }; codeNamespace.Types.Add(classType); diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteUtilCode.cs b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteUtilCode.cs index a0484be..400bf77 100644 --- a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteUtilCode.cs +++ b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteUtilCode.cs @@ -48,7 +48,7 @@ namespace Tools.ExcelResolver.Editor BaseTypes = { new CodeTypeReference("SerializedScriptableObject"), - new CodeTypeReference("IExcelSO"), + new CodeTypeReference("IExcelSOUtil"), } }; codeNamespace.Types.Add(classType); diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.cs b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.cs index dc9823d..aaee4e7 100644 --- a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.cs +++ b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.cs @@ -12,6 +12,10 @@ namespace Tools.ExcelResolver.Editor { [SerializeField] private ExcelResolverEditorConfig excelResolverConfig; + [FoldoutGroup("Hide Setting"), LabelText("导表前是否清空Console")] + [SerializeField] private bool isClearConsole = true; + + [MenuItem("\u272dExcelResolver\u272d/ExcelResolverEditorWindow")] private static void OpenWindow() { @@ -59,7 +63,14 @@ namespace Tools.ExcelResolver.Editor [Button("导表", ButtonSizes.Gigantic)] - private void StartExportExcel() => ReadExcel(); + private void StartExportExcel() + { + if (isClearConsole) + { + UnityEditorUtil.ClearConsole(); + } + ReadExcel(); + } // [ButtonGroup("Generate")] // private void GenerateSO() => WriteSOData(); diff --git a/Assets/Unity-Tools/ExcelResolver/Interface/IExcelData.cs b/Assets/Unity-Tools/ExcelResolver/Interface/IExcelSOData.cs similarity index 61% rename from Assets/Unity-Tools/ExcelResolver/Interface/IExcelData.cs rename to Assets/Unity-Tools/ExcelResolver/Interface/IExcelSOData.cs index 710d3e6..4b01010 100644 --- a/Assets/Unity-Tools/ExcelResolver/Interface/IExcelData.cs +++ b/Assets/Unity-Tools/ExcelResolver/Interface/IExcelSOData.cs @@ -1,6 +1,6 @@ namespace Tools.ExcelResolver { - public interface IExcelData + public interface IExcelSOData { } diff --git a/Assets/Unity-Tools/ExcelResolver/Interface/IExcelData.cs.meta b/Assets/Unity-Tools/ExcelResolver/Interface/IExcelSOData.cs.meta similarity index 100% rename from Assets/Unity-Tools/ExcelResolver/Interface/IExcelData.cs.meta rename to Assets/Unity-Tools/ExcelResolver/Interface/IExcelSOData.cs.meta diff --git a/Assets/Unity-Tools/ExcelResolver/Interface/IExcelSO.cs b/Assets/Unity-Tools/ExcelResolver/Interface/IExcelSOUtil.cs similarity index 61% rename from Assets/Unity-Tools/ExcelResolver/Interface/IExcelSO.cs rename to Assets/Unity-Tools/ExcelResolver/Interface/IExcelSOUtil.cs index 06a154d..2da6b0e 100644 --- a/Assets/Unity-Tools/ExcelResolver/Interface/IExcelSO.cs +++ b/Assets/Unity-Tools/ExcelResolver/Interface/IExcelSOUtil.cs @@ -1,6 +1,6 @@ namespace Tools.ExcelResolver { - public interface IExcelSO + public interface IExcelSOUtil { } diff --git a/Assets/Unity-Tools/ExcelResolver/Interface/IExcelSO.cs.meta b/Assets/Unity-Tools/ExcelResolver/Interface/IExcelSOUtil.cs.meta similarity index 100% rename from Assets/Unity-Tools/ExcelResolver/Interface/IExcelSO.cs.meta rename to Assets/Unity-Tools/ExcelResolver/Interface/IExcelSOUtil.cs.meta diff --git a/Assets/_Project/ExcelResolver/Excel/hero.xlsx b/Assets/_Project/ExcelResolver/Excel/hero.xlsx index 6c281b5ca704a09bda023a73bad67150b725884f..f92c9612eb186b293a84a953c5294455b9d591a2 100644 GIT binary patch delta 4874 zcmZ8lWmFVg*PWqf5Ewd@?k+`|A*4g8LBI!)l1>4Ip&2@cknRQrhLDi10i;`CKp2q* zQAy!dpYQ#?wZ8jfud~kH=iK{iuY1n5;jB?z9uU5*Fvw;B1OS|I0043T0Px(+M&HxT z-AmZU&C^!M&&4?~WlFP8gf8L;A5*y1sWbCMR&*O}h|jdm0WrES-1z^E#h z^1v0=Y*g-Idq&&Wc%2zPoyCE=3s6uFd~L#5h-J}(Upl&|&T%=6zX%~FKLN`VRcaaj&LnQs%n0~t|w zahrgkD4jG1VLSj}3;79;9sXGg5{Rk#MVNsZ8jK9r0zRP>+Ax!B%3KPhQ48j8#-^zb zk1e=q^-`orD*t5dS1;FVxnyGXKfjQh=y;%Aol3>7055iIXH$JS;TO`JvgF7XN(4ISAf-{;lytqLbBKip6!U% zXvR!g;$dNQEoO;U3Ddn9cW^JsNj;@XKzS)!Ih&yx6fxrc1vk5?=|&%acHTlTc}2uE zO>ei$`YUq`UK^AfJj>%sHQeeB4c{shsBIkyT6{2{$xXuc2<55rYy!*8B4p*!E}^wV zR=?85GA1#B^#lpo!l^k1nqsmER97J=bgMN-K3nAVi9XM9TIA-2e1wqaj$8~G`>mG5 z;?F=jT13~A*Ojh$a*@8mQhlJlS9LK*9>n`Z{@8BLJ55q80C%<2y6+@VpG>#ud) zEOqK38D7c(QGv~t%H7Xw78WaH%d0Y02W?QlN$Q^~R)zaTlTk8uvL#!edt5`IR{4G9 z&XKd~q#1}?Jh)02kwB9BJ}o|hKObEnV@u=)qeE^tGlb9B6m2ozTx8^+%E)V$d|nxi z(CIIUcF0CJQcj7IqqsizsElPJ9#NjGsCeu27e#-~MA%YJJs_{_nUdu7*o4+U zrS6IXQ|Y7#&gCkQ}9prM1B}P_GpwU@xcHBTi!!B96A#5bv^cgl$e(c%auGZ9<{@ zx$isF2-@}QczZg!+I#)+bDvZ_CrTx{!J|-&)l#dWDGF|_ z(rXusuC$;)U^ra7-nk#Yx>?$r+gy!)!qG~ILUt+T4g;+{J z98C6jVhqHju$a;iPjyHrUbPS6xh{g7oi_5rjWR-c%tm%F`$kMy0*job5#$vcm=SSm`dW~V+yep>=kRh>NVJRzM%Zm#a0 zL#Dlu$Y)pBnSe6O2V`xjs?XhjM!8Cz`HD-Sej zvmsO-I@@h%GfCzA}Hyw*Xv&Qj;HTu^r{=l*>%W4Pwrdh?@w8C2;^*~i1v-`5s1sTMbxpjr5I1y zO!vj37L>?NODJ<3K}0i#xe>a(=#hJT=QO1>=+*7Vylui-8(Kp-lCd}9Oyl*3G6&tv zm#gk%ro2HddyNP1ha__i6pJsJw(dT0o$WBd>_#b99wc_u2{EEMqgVV@B>dcGGez*gT?MM7`@2|JL^ayhYe@KIo!hY;7R$%q3lz_40@|5e?+G zJEYU5@x9d7SppH4lsC8n$axjW%1o^{CEMwmL9Q^^)@# zk9&wuf2R@L?B!S+Dn`mnWJ(J`kO0V%FlHBeCD+BaK83 zN{R1o@RP3M81AOK8jTFMYPDY&^$xzF*}wzME<_>yL+0a0tUO9{Wd;3`BWP|~G&6({ zm@hT2YCj{%`HAm@0khkd>jWWo_X{a%8fgWnjD_H}mz*x7L;cuU@ z;ai2ixP04>AEp4Rjo%3lF{ZbX3g6fd%d2of7hLK`${(Xq?9?bPH3*eC&zf= z%uI-hPgM0fmdDDU)cEtRrymZ#l~&$ ztpA*tRXIsC{LTQMbIIuh%;h;x!_qM1d1G>+p9Q1L4UusHrR?~}hS(Z&O>wvF#}px@ zT8<6NZ6#VUSW_B-qYXF~pl)ljlhK>k`{N9I-|Hi7C3)#n^);7IK5j)4SGle!JtV2U zdhKIix&2(l>J|q|fONRV#Mh(}C(r4MCiC*`A1-9`;Rh_<%MPloB<1&E1o8*tb&|(f zS7M!yokZLx1ddIxd3V>rDidz~0h3y8gh381${n;NL|^niG*|gu1aTWifV*T( zFWmXo^cyI3C6Di=U2eqMi zSVt(H^QK|iXB(m1T2|x=69b%W#k1Aw!}|#O=o}}6W^IMN65DVz*^ET^_as=~M`J*m zMnzJq12h7O&-actrcPKaT7rYSiYmuhkGHJDOVefUi8g*ziMkv<_oq`sGf+6kdqrNS zFtn~twSN-+X%X9#t!@vA##kh}=Q4l%O;5tetfaezZrXEA#^+yi_|WiK($v(`%F@A9 z;?&ZYidyQQE@mm3tvHNyvG?pe=lWoRt>nVrv zN^4RoKNB%Wad-QP7EQ*n*qo3<=BMR8RoRxNs2Q=}&}ZxFL{|O>Xirw=@9B>I2BFWb zwQ@D-0l$-sa1XivN@LIGof3QBqLI`Ab{>{p)5{&+%O7^x{JKrBNXooz*iX6gxhC7iE7cY6)D&p5i};!^&Vo|1ePyh%czoU_xF7nlEw zgG7C0hLHWh^GKv=B&I+TXrw&l??ZhlIgZ zpP@tbRl*m{nJ{zbo9kT<0YYlHrt+F#zDM8rj9wY-GjsVizaKa4Gq3=|bY8hNb!mRM z*SCo-^SmxvVioEXitep+7R#A(_`Tc959p(DZsu#rGG)owLiTsJ;||gn$JgJAF+)^- zpW|4`+u)a5Hu|ofXCPq`J$r-Y6bQ3Q4xT!jx}iU!qPId-Wm1CevnY;N1x}R8-*}@C zyh%f@G=o445k9vJDcOmQ+Pnh6rMvOw_w*k>Rv%Z;Dmg|3+l!N<2l6c~WHr_Ov>p8N zH<@DOJ7q35H&4Pa2}hXh*XRDw(M>2NL5yNh0*#S6!IP{yJ-r(b`PQp^Q>LKVlJ_ib z>El(>LD#a56UtCZsP*-Z>U7?tFfNro>}r1J>z@*=8}$XCdXbxJ)D8xI1RNaFW3~wT z-t(O{Uw<)_Jclv-{bbCuWbicfzO3;-=UhY`^*JPo%yiE{i>Vo?4bf6!QBD!=oeTyt z0SlrU!*?9c$2{pck*~vSXhbS43!Uvo(nK;!10oti*a=SB=n_s%H7Lm5huE<6+gF+J zFy2G8K~R5mep|cHEqK{);YP9(Q8ItGW(v&b9_qNB3uyP`19a*5O+=s@&i#L-y}Ek9 z>_2yPlQ>t9Sou=<;afv@NiOZEaqlZ5mJHwN->mf_qKWd2)p7LVz2mw1_S$5| zHBHxf+kk7GYa9X}Xy@tp{W81V7F;L<6NrmZw44snUX9nvg4EVYhH&ate1G2IW zjnF1PeL=c53%)m{VSP}v!#$>ZW_AYr_u+Svl`vVK6pZ4l11D-7__%m4zA!mA7{~uA zBz_i1%x1%mb(?nb$$ZGVTYRr7czFx%94@Ba8L@EAoWy_>;le|evl`<8qmVb8iogw| z0+%=rJ{!`TD+T}W;s{C1Z3tvS{==;Z^hFkOi{J>dBWJiJaSYj!U>*U+|38oX9!UT| z0LyPQMH=vMbN}CW696FjL;gPh@@2IDPA}g6&bD4i2p0>oi-#14hy*#oBMB5n;`1s3 z(~)YtvcL>v7%wa1|E^C+0RXyx`}|L%K4cfKDh>|_xsFGTWaJaZp(FkqTJcd6@N@l< F{s-^;A6ozb delta 4820 zcmYLNbx;)E7G9Qe0i_$HyI~2DlJ4%3?p!36S`k=MSXdB{lBEQsr9--vmX=aNSdfrL z9{zrB-aCJMbLKnWId|sHoqNwcGe$RtHF+4YNc(J0YYYIu0|)>R0{{RAZ+l&cw~wEI zy*I>>KgiP~EOk}ASCFdz5PP-Yd#BcvS;~a}yE-1+SET)Ih){IAr+(^~=UivRyYtSd z{fNeMLG+*If}pINlUv9am8tIbs#lbPjWgxRE{eJUbr-X8RPw=K?=K+sS6?=0F*)pX z639#AP|8u}k~x9n_1deenZ#pFZA5tTbh57nZtKyH<>tk5sB1meP}XvyVz35JaJB{{ zfu0PCO7ORAHe3*@J(Yx97w{g4PmMf)`*qh>`S#_m7 zNAUG4FSl(sF4H>Kn}PTIg+jyQ8DJ{nfmX9MhUhA+cf9GZK$y#}NKo!JK+`#9b1o}%qM)9)y z3b3lFZVDAAvL_-+&n^ou#rC#P-{2SdnNd-2UtxAi-Y51)Ouo27t;>UVEWm4=dOFMo z3_K0W1U?)r0D$=sQVv876Z*UL=_X5%LJ6X<)$&{1_;ZZN+zb82(t)P=xF$EZ`V41k zhip7X;~{pD=b!jMQEX{PV+wQ#?R>A_PZ))6Z}N)2kWULUU5-6$&)Zv*V)jkVcRE;w zdCI)DEOp>a)>DT_`F&cSx|O=SZE{uGv49R_KIuYah@6j^3LU|2g(Wu$(jRmAJQ7in z7wKDjlXp}1j;f!TQ{%Q~F62}s?R%9&=0yHF{W+Zz0sVpbVsh4#h54Z>am|8ef_{Z{o9w7>ABg=o; z{IZ`u6>PiO2g!Z~6Lg1`mmim-PEqYu8zs-WCk8#BT-3wHu}pz7x6hXzZnY8!0 zO8T8+T$JDFu&&P`dQ6^pRcD9N+GbbJ#2pb^={K_Oeo`BQeGv)V7qf?@x+Nf|vz`fs z9Y!FPS+Q|0{Oh8Y7W{=z`Q6hepY2G)39Crs!e`Q+(Q`-kNIv*u;!h-nDf?i}9qGD; z0#SzqPGOZxd{fKfB(SBH)tn`x{5TtJUoHC)epyG4nzX#SOiLY!7z7IUVB&v*7}YI6 zn&ocH9_P%%29wKc5=1@d#cfB zy8cchnEORVDbqj?P-w=~oDoh}agAuewo`4al}j{-HJ&p)#qZPovj7w-g4N0qpwF#T z=iREy#4gxo$;`_rXy9h1jFq-g=r;-%<`CZ_tHQQJ|cyyTx`2|r-)3{ zO3XeV!q`L$92B-1=3g#e3gr2G#SpZ9B!iZln^lZaouc8^g%+9Ucz;rb*v5?{1H1*0LMm#*F?hwqM_xE-+7Se~52Ie`V<31xt z2Kd#s7HBG*f#;ffi)2nMirwkYHm-Jj+rAQ|?PTW^u+UG=&Droqzx#1HxuGHjv3Y;w z+M@TghuCV*yb?k@Bxm&+DK4Vc{@Zqh26M=fx!D`cH|PQ&R7(4m=PfngTpzsRqN)T{ z%vxKcWkC!C`}~gQD0Z7^fLUHCe=rQ_ZFHnkP%mZ^Uh^;FIZi7N&N}zV`XR?cjrl%p zfp5^P-r%iIA#uEnN$2|4Wc0~*Jq9nncbha39LO#M45srvTdL*gNt_isL2Xp6b46GE z-N4-s0+%GAxEi0gz(!UwIt$HWWoiof8r_E1YEFPfs;r5{Ih9gsBUn6qDLZ~kTDMt< z$t`U+d)*vm2n`Eu4%K)7uN=ji9bu4vulQ}CB~ru7)+x?#Yf2`HwVlW3Pv~8U|1p94 z(a(1|p}mqJO(r?voadcuT{oNB4I#1q0bss>(*99WI!=yhw{7XK2`7=qH)MOL;r_$T zjmw1NIjk5^+^IVYE3A-vpiI0Niw(WhOEfQycs0AaZ09H&kY}pE9@AVDeARk!O72e3 zGVft$IZ-r?F~7L%dwvN_v8dXyp9l3Hy|DWu&9mf zq-2HJ4?>qT^jjAiUQ9)3yQLriMhktz<`My40?Mt3^b1TV9+88{Idil(nhm%Zc7V7W z<(rGw&Tqljaj*zyCy#MWVeMtMxZJ9l3&*_kRjKhHr~QH7(*=AhLei^{+>#Fm#h={5_hpwgw^PKi2zSB0JKEM^6)38z2A-P9}C zd!&-vCE4h~BhlOL;5xqo^IL1S-k!%X(&-59qkcqbN?2L7edQ%Pk7*pgbZBAa_Y9`c zfC}28$A^~kH_?0vav{Kc{Q>Ea{6+dGaJ3?* zf3<`&Lr0hIr|__rlq;z_Y{%Mj<^vdhpu$tqLjgTyP~no>sZ|V)nE}(tj(WxVoo?%N zZ9(>XPI;@j0BJ73M}@Q_@=_77TEcL@z;hW`tVQk%DF#Up6YuU0%>lFRXaV+1B}#H; z`{E*Iw{{sd`=aD7es7=Uw15Yc5WNo#;-X-8k{o%5@s_TlHdK!@ z^X$7kxuiP%#a;=eVCoROALWXLIPOKvJuwiqG?*g3sPg=cpol!{QQenlcX}dyG83f- z#U^YgQ=a=6{5io^SiSA_*b@9hK%4byD(~l)pU^|Cddje+l-VjeYIGqQHYA)F;2%<# z^yp{yfNiF(55pqkvb~VLO~LlwhINB=_1uhlrE$d`oB#FkDB~yV@>w35_j=1>-PY;5Gl`Q_<6@|Hl>^=Xn6001ck4`WIdx1{ zO1@eq^<`ERHEdkevs1hmB3IJzKN6~;05E+r3?56o(d-!;x|8iq%y(Shy`29YTrQT?o#sf7b2v!DFs1Rv>^vn#_#N<_{ZuJK3J;NyKJkIL=^M5PA#^gG~$0y;qV@=|9}Bh z9ZhyKdh&XHpU;Z&6KX$;C(!-H1H; zH9W;}Z^hsV4et;yn*hvq%AyBb9k9mopv!O$!)UxulBSnF+~0KTNVR8=9;fH(rtf}G zb@g>-JG%QC6yy<%^KD4+8qfUjowLP`W#RxQ%l?}IO?j*zuJTwOn}+FY_WZe?jJ85D zN@ea%p?IXRPfLWxqS2WHf|V>YRFDDTWk`!{eRDK*T#kFJdgXiPXUs!!gh&`T>J(w# zi#7(NtG!3GxX4E%*|@za;%fwilfbMTNQQXw)8 zGntTxy3$s#tNpG8P>>~`askNMU;+{@7GAO8Y#-qK>PYt}s| zNi{XZ%+{sdyUOi<@xScJVquN@u|ss8Sq^Nj>Z6!I?pbxKDxox^xwaGgvu%6oBMv_! zhuX()H?w$zU&F1%bZUPlRpN$ZRf28?qUN8H1jl^j(#ey~mWEPx#t@lv(kJuLHeL{i z*oq7SyCXvc@?|q`Zk#g?@7S3Y=wnk;C?SQp#05DEpYk;GZdsY-&J2JzR|D-iCNNkK zhI|PuA)3)akLHHIN9uFbB)YBtP-SXDHBx^AjXp_Jl!oKXhN(xMs|!rrT>tseOF8{q zI_dj6ZcW!Ajchr2OK2kl+j0cj@IPTBQtm&%;lzV}au~Lag%V<9VS3BU*&5F(HgyY%jmTIeKn*L7n~>OussZufEnHDb*+$r44e_rpWoWxB&+I}&a&+;Mj1vJ4 zIr4$XD&uB$1=B-9fWw#0wPcTpe<4_zTP~(65>$jh$)Jbc5|(n4gMqM8Sf~{A*V6E9 z$TXpBvMbcmrALl4;rAahZs6X>Pxs&KS=dV3nc(Gf}YT!^EzyrMoV^?-q_G%Vgeekm6YgzVeGCqBK9^ z(SK$>0w2UnEX0bKGlA8wA7NtBV`PuGiAj~H%WHzh;;xGaFe_NGj8P_bVnGsW7z#3Q zA;L_>YF#nEAL^N-Bpvb#UBrb`rg5Z%%@OvDeamf&4qjrkt2o5s=yceUp=qCYyBd0Pa|ppRs;Ivs{uT3B8ckatP4DX z#@<9{YTeiEWohD7{73k>#WB(H$`DiG8W1)};Qcgd@a$!E-ojxbdd)br9>z7j>AfM& z#CT;}(Ny`=>!lgkG5Cfecsh!pVQhMhkHMNC;<@X-nbxI>3hwOHdP)JgTYseaGl8rh z@*SZ*rks1|$XzQ~ogM!0^%IcYp(XAVUG0)d@$;%7c{Q%?NVXN@*YG^@i!Lj&m zL&;bU(QiFMBRS7wSuy#eP3+{UhCjIV>r5}OFa(gs>~dIfOaK5plg1Mg=LK^_9g8ZJ5{E$1WPEHjdaQxtf^jPzllLxyt_(f @@ -67,6 +68,11 @@ namespace Tools.ExcelResolver /// /// 攻击优先级 /// - public List attack_target; + public List attack_target; + + /// + /// + /// + public Dictionary attribute; } } diff --git a/Assets/_Project/Scripts/Generator/Excel/HeroUtil.cs b/Assets/_Project/Scripts/Generator/Excel/HeroUtil.cs index 052db47..c4f85c7 100644 --- a/Assets/_Project/Scripts/Generator/Excel/HeroUtil.cs +++ b/Assets/_Project/Scripts/Generator/Excel/HeroUtil.cs @@ -17,7 +17,7 @@ namespace Tools.ExcelResolver using Sirenix.OdinInspector; - public class HeroUtil : SerializedScriptableObject, IExcelSO + public class HeroUtil : SerializedScriptableObject, IExcelSOUtil { public Dictionary Data;