From 886a23cff96ae6bc8869845c6c4ce3f5eab14e82 Mon Sep 17 00:00:00 2001 From: zhengchang <985942825@qq.com> Date: Wed, 12 Feb 2025 16:43:55 +0800 Subject: [PATCH] array --- .../ExcelResolver/Editor/Core/Types/TArray.cs | 67 ++++++++++++++++++ .../Editor/Core/Types/TArray.cs.meta | 3 + .../Core/Util/ExcelResolverUtil.Cell.cs | 1 + .../Editor/ExcelResolverEditorWindow.cs | 2 +- .../ExcelResolver/Excel/testExcel.xlsx | Bin 11143 -> 11260 bytes .../Excel/testExcel/testExcel_6.asset | 3 + .../Scripts/Generator/Excel/testExcel.cs | 5 ++ 7 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TArray.cs create mode 100644 Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TArray.cs.meta diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TArray.cs b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TArray.cs new file mode 100644 index 0000000..5c98421 --- /dev/null +++ b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TArray.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Tools.ExcelResolver.Editor +{ + internal class TArray : TType + { + public TArray() { } + public TArray(string typeText = null) : base(typeText) { } + internal override Type RealType => InnerType.RealType.MakeArrayType(); + internal override string FieldWriteFormat => $"{InnerType.RealType.Name}[]"; + internal override object DefaultValue => Array.CreateInstance(InnerType.RealType, 0); + + internal TType InnerType { get; set; } + + internal override bool String2TType(string typeText, out TType result) + { + result = null; + var split = typeText.Split(','); + if (split.Length < 2 || !split[0].StartsWith("array", StringComparison.OrdinalIgnoreCase)) + { + return false; + } + + var innerType = ExcelResolverUtil.GetTTypeByString(split[1]); + if (innerType != null) + { + result = new TArray(typeText) { InnerType = innerType }; + return true; + } + + return false; + } + + internal override object TryParseFrom(string cellText) + { + var splitChar = GetTagByDefault("spe", "|"); + var split = cellText.Split(splitChar, StringSplitOptions.RemoveEmptyEntries); + if (split.Length > 0) + { + var array = Array.CreateInstance(InnerType.RealType, split.Length); + for (int i = 0; i < split.Length; i++) + { + var parsedValue = InnerType.TryParseFrom(split[i]); + if (parsedValue != null) + { + array.SetValue(parsedValue, i); + } + else + { + return null; // 任意一个解析失败则返回null + } + } + + return array; + } + return null; + } + + public override void Dispose() + { + base.Dispose(); + InnerType?.Dispose(); + } + } +} \ No newline at end of file diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TArray.cs.meta b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TArray.cs.meta new file mode 100644 index 0000000..ea3b968 --- /dev/null +++ b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TArray.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a33b2f1ceba6426eb98d16cba1c4b429 +timeCreated: 1739340790 \ 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 d3b9f78..460b741 100644 --- a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Cell.cs +++ b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Cell.cs @@ -74,6 +74,7 @@ namespace Tools.ExcelResolver.Editor } else { + // 如果是类或结构体,使用特殊的转换方法 if (type is TClassAndStruct classAndStruct) { result = classAndStruct.TryParseFrom(row, col, worksheet); diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.cs b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.cs index fd66105..a378c1d 100644 --- a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.cs +++ b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.cs @@ -44,7 +44,7 @@ namespace Tools.ExcelResolver.Editor } } - [Button("删除所有生成的代码和SO", ButtonSizes.Gigantic, Icon = SdfIconType.ExclamationDiamond), GUIColor(1f, 0f, 0f)] + [Button("删除生成的所有代码和SO", ButtonSizes.Gigantic, Icon = SdfIconType.ExclamationDiamond), GUIColor(1f, 0f, 0f)] [ButtonGroup("Button")] private void DeleteAllScriptsAndSO() { diff --git a/Assets/_Project/ExcelResolver/Excel/testExcel.xlsx b/Assets/_Project/ExcelResolver/Excel/testExcel.xlsx index f4f378c971489cd291ded3c4c2afdb66c274fce4..ff5cb3d89b670454547ab774553b773b7e32025f 100644 GIT binary patch delta 2469 zcmZ9OX*ksT7r=irjGdV5hOCW!%bIP$k4Lik)tYiB5uan}MBusFPjeCSpG$P8DL4n@w+8Ca`+Pk0_NSotC~=1n1j!Hjd}BA&`cC5q=v zwKRV^zw_FdhMSm~R+;mJ|_m=kxL>Ly&&u=l{#&5a55PX^c=SOmpY(9Ev;PDrgPM6v; z-p+~0+HwEYM){Qtk@!LL4eI(v*h79>(o80Bx14}cyb`T-6Rc|_v8FspbkYna^t2yD?ft|dn^cY*D$8UAEhyYpH(atNh*UX3$y3wz z63`RR+*&!J&1kZd+ZvQCdvC7R_pX0q%SYIhc*^rCO!guoHRx%Qn5KE@JA(idiHu&f zee98&pjVu2xNGhAtgwcgHNJYR$$>vi9wYaR4>L60jEcHs7D%ES-@MmO@g)fYT)`T@N+bm94WaoFQaBY;;AoGwQ}?3ExBnC?Zk~%<_nX{xN0pR! z06af!TTVfKdRsuhmATOqcp8Uy0u#>j&a<<&9#wRpZqV^G*3FLcG6@>I9GYYB7iuDD zkZL;;ul=1-u0_wy_z-U2GHbPDpII1N$8M*l6f=x+5ZN`Y5jnI7ffeD(r~lk$_0@QP zZa|ghGe=&Zq+&T42IJ;zAd)kof7^^>74#&pp<@J?CNZ;V&}~jas5jtp+f~qjp_?c6 zA*ElK3H}NjKjYcQNkghLGkDUU?H6zM>Q@D8AmVMw!L#K|H-i`gvb4bFyg zvObM>r{II{Jo8nQBAZjVA))DAB{A=Fo=F>)ld7d@S||OjQKOXVskQ&Ygx~b*qqqi{ zkigK=t*-2()`1D}qhyk*A9MRE zY$ElWGYbgx<6DMM6>4draa6XzCmvxJg|o4h!_4FEEQB?;76W}No>iguLbhMBf+_E} z-(C@T`*sk}sn?brew-Bwx=)SVOhg5a(;eLId&9v8(r|C zukb`hMunvNa?E*^p|}LUMIBQkB+3OiO{V^mXzccuu!z(P$a`!t~E4NPZ4NT zr|9^q_^h2QMox4;iM5iex3!extrNe}VmWWchdIQhCxktXgkO#I{gUR=Z>lGx`;63c2&9C;_F&H3}Iy;JFmv)2dnSsSD_z2!^w7`y8`5!OfEKo`5fKe4{JKL7-C$}?fIq} zSgQ!`TJ4|7N4DpiZStmlBb|O(kyjR$lW;w;>Mo@Oa{>HuXW`S)i55U58UDJ5Ou|fr z0Dq}SJS~iXYSNL}WWSBZ0Qtw7N(G@)6 z-v2&Rzd)b%I^pOKm4DE!K;0mhCI{pR$cRKi8O1;oq%u@a3?v{kV84zYkXzCk3Znsq zX}CbFGy*J;WP`YZm6D238*y-2QWX*ba!Sbw{C6eCTLB<|@bUW@be6gRwc!QtOKC## zzzHceNIS?bje;6*gBWQoNHmxxErR%ex1Z4e<11-@n_dCZ1hUH*LLagG3i!)#(ODr+ G^8N*&Z)}7B delta 2367 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 diff --git a/Assets/_Project/ScriptableObject/Excel/testExcel/testExcel_6.asset b/Assets/_Project/ScriptableObject/Excel/testExcel/testExcel_6.asset index a393ddb..4818344 100644 --- a/Assets/_Project/ScriptableObject/Excel/testExcel/testExcel_6.asset +++ b/Assets/_Project/ScriptableObject/Excel/testExcel/testExcel_6.asset @@ -40,3 +40,6 @@ MonoBehaviour: Entry: 8 Data: id: 1 + skillArray: + - {x: 1001, y: 1002, z: 1003} + - {x: 1002, y: 1003, z: 1002} diff --git a/Assets/_Project/Scripts/Generator/Excel/testExcel.cs b/Assets/_Project/Scripts/Generator/Excel/testExcel.cs index fc418dd..2ef0b88 100644 --- a/Assets/_Project/Scripts/Generator/Excel/testExcel.cs +++ b/Assets/_Project/Scripts/Generator/Excel/testExcel.cs @@ -29,5 +29,10 @@ namespace Tools.ExcelResolver /// /// public Item item; + + /// + /// 技能列表 + /// + public Vector3[] skillArray; } }