zhengchang 4 months ago
parent
commit
886a23cff9
  1. 67
      Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TArray.cs
  2. 3
      Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TArray.cs.meta
  3. 1
      Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Cell.cs
  4. 2
      Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.cs
  5. BIN
      Assets/_Project/ExcelResolver/Excel/testExcel.xlsx
  6. 3
      Assets/_Project/ScriptableObject/Excel/testExcel/testExcel_6.asset
  7. 5
      Assets/_Project/Scripts/Generator/Excel/testExcel.cs

67
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();
}
}
}

3
Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TArray.cs.meta

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: a33b2f1ceba6426eb98d16cba1c4b429
timeCreated: 1739340790

1
Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Cell.cs

@ -74,6 +74,7 @@ namespace Tools.ExcelResolver.Editor
} }
else else
{ {
// 如果是类或结构体,使用特殊的转换方法
if (type is TClassAndStruct classAndStruct) if (type is TClassAndStruct classAndStruct)
{ {
result = classAndStruct.TryParseFrom(row, col, worksheet); result = classAndStruct.TryParseFrom(row, col, worksheet);

2
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")] [ButtonGroup("Button")]
private void DeleteAllScriptsAndSO() private void DeleteAllScriptsAndSO()
{ {

BIN
Assets/_Project/ExcelResolver/Excel/testExcel.xlsx

Binary file not shown.

3
Assets/_Project/ScriptableObject/Excel/testExcel/testExcel_6.asset

@ -40,3 +40,6 @@ MonoBehaviour:
Entry: 8 Entry: 8
Data: Data:
id: 1 id: 1
skillArray:
- {x: 1001, y: 1002, z: 1003}
- {x: 1002, y: 1003, z: 1002}

5
Assets/_Project/Scripts/Generator/Excel/testExcel.cs

@ -29,5 +29,10 @@ namespace Tools.ExcelResolver
/// ///
/// </summary> /// </summary>
public Item item; public Item item;
/// <summary>
/// 技能列表
/// </summary>
public Vector3[] skillArray;
} }
} }

Loading…
Cancel
Save