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 f4f378c..ff5cb3d 100644 Binary files a/Assets/_Project/ExcelResolver/Excel/testExcel.xlsx and b/Assets/_Project/ExcelResolver/Excel/testExcel.xlsx differ 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; } }