diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TBool.cs b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TBool.cs
index bb00bb7..d2e2c90 100644
--- a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TBool.cs
+++ b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TBool.cs
@@ -4,14 +4,15 @@ namespace Tools.ExcelResolver.Editor
{
internal class TBool : TType
{
- public TBool(string typeText) : base(typeText) { }
+ public TBool() { }
+ public TBool(string typeText = null) : base(typeText) { }
internal override Type RealType => typeof(bool);
internal override object DefaultValue => false;
internal override string FieldWriteFormat => "System.Boolean";
internal override bool String2TType(string typeText)
{
- return string.Equals(typeText, "bool", StringComparison.OrdinalIgnoreCase);
+ return string.Equals(typeText.Trim(), "bool", StringComparison.OrdinalIgnoreCase);
}
internal override object TryParseFrom(string cellText)
diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TDict.cs b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TDict.cs
index 5ccbdcb..618ed1b 100644
--- a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TDict.cs
+++ b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TDict.cs
@@ -6,13 +6,14 @@ namespace Tools.ExcelResolver.Editor
{
internal class TDict : TType
{
- public TDict(string typeText) : base(typeText)
+ public TDict() { }
+ public TDict(string typeText = null) : base(typeText)
{
String2TType(typeText);
}
- 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 override Type RealType => typeof(Dictionary<,>).MakeGenericType(KeyType.RealType, ValueType.RealType);
+ internal override string FieldWriteFormat => $"Dictionary<{KeyType.RealType.Name}, {ValueType.RealType.Name}>";
+ internal override object DefaultValue => Activator.CreateInstance(typeof(Dictionary<,>).MakeGenericType(KeyType.RealType, ValueType.RealType));
// 键和值的类型
internal TType KeyType { get; set; }
@@ -21,7 +22,7 @@ namespace Tools.ExcelResolver.Editor
internal override bool String2TType(string typeText)
{
var split = typeText.Split(',', StringSplitOptions.RemoveEmptyEntries);
- if (split.Length != 3 || !string.Equals(split[0], "dict", StringComparison.OrdinalIgnoreCase))
+ if (split.Length != 3 || !string.Equals(split[0].Trim(), "dict", StringComparison.OrdinalIgnoreCase))
{
return false;
}
diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TEnum.cs b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TEnum.cs
new file mode 100644
index 0000000..97d79e8
--- /dev/null
+++ b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TEnum.cs
@@ -0,0 +1,31 @@
+using System;
+
+namespace Tools.ExcelResolver.Editor
+{
+ internal class TEnum : TType
+ {
+ public TEnum() { }
+ public TEnum(string typeText = null, Type enumType = null) : base(typeText)
+ {
+ RealType = enumType;
+ FieldWriteFormat = RealType.Name;
+ }
+ internal override Type RealType { get; }
+ internal override object DefaultValue => 0;
+ internal override string FieldWriteFormat { get; }
+
+ internal override bool String2TType(string typeText)
+ {
+ return false;
+ }
+
+ internal override object TryParseFrom(string cellText)
+ {
+ if (Enum.TryParse(RealType, cellText, true, out var result))
+ {
+ return result;
+ }
+ return null;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TEnum.cs.meta b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TEnum.cs.meta
new file mode 100644
index 0000000..34a375e
--- /dev/null
+++ b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TEnum.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 47d4bdd2042649beb4d0f93fd4369ad8
+timeCreated: 1737819504
\ No newline at end of file
diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TFloat.cs b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TFloat.cs
index 972db93..b7c03b7 100644
--- a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TFloat.cs
+++ b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TFloat.cs
@@ -4,14 +4,15 @@ namespace Tools.ExcelResolver.Editor
{
internal class TFloat : TType
{
- public TFloat(string typeText) : base(typeText) { }
+ public TFloat() { }
+ public TFloat(string typeText = null) : base(typeText) { }
internal override Type RealType => typeof(float);
internal override object DefaultValue => 0.0f;
internal override string FieldWriteFormat => "System.Single";
internal override bool String2TType(string typeText)
{
- return string.Equals(typeText, "float", StringComparison.OrdinalIgnoreCase);
+ return string.Equals(typeText.Trim(), "float", StringComparison.OrdinalIgnoreCase);
}
diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TInt.cs b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TInt.cs
index 23b0330..9ed617c 100644
--- a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TInt.cs
+++ b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TInt.cs
@@ -4,14 +4,15 @@ namespace Tools.ExcelResolver.Editor
{
internal class TInt : TType
{
- public TInt(string typeText) : base(typeText) { }
+ public TInt() { }
+ public TInt(string typeText = null) : base(typeText) { }
internal override Type RealType => typeof(int);
internal override object DefaultValue => 0;
internal override string FieldWriteFormat => "System.Int32";
internal override bool String2TType(string typeText)
{
- return string.Equals(typeText, "int", StringComparison.OrdinalIgnoreCase);
+ return string.Equals(typeText.Trim(), "int", StringComparison.OrdinalIgnoreCase);
}
internal override object TryParseFrom(string cellText)
diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TList.cs b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TList.cs
index ee5f0dc..afb7282 100644
--- a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TList.cs
+++ b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TList.cs
@@ -6,7 +6,8 @@ namespace Tools.ExcelResolver.Editor
{
internal class TList : TType
{
- public TList(string typeText) : base(typeText)
+ public TList() { }
+ public TList(string typeText = null) : base(typeText)
{
String2TType(typeText);
}
@@ -19,7 +20,7 @@ namespace Tools.ExcelResolver.Editor
internal override bool String2TType(string typeText)
{
var split = typeText.Split(',');
- if (split.Length < 2 || !split[0].StartsWith("list"))
+ if (split.Length < 2 || !split[0].StartsWith("list", StringComparison.OrdinalIgnoreCase))
{
return false;
}
diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TString.cs b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TString.cs
index 448c92d..8073857 100644
--- a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TString.cs
+++ b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TString.cs
@@ -4,14 +4,15 @@ namespace Tools.ExcelResolver.Editor
{
internal class TString : TType
{
- public TString(string typeText) : base(typeText) { }
+ public TString() { }
+ public TString(string typeText = null) : base(typeText) { }
internal override Type RealType => typeof(string);
internal override object DefaultValue => string.Empty;
internal override string FieldWriteFormat => "System.string";
internal override bool String2TType(string typeText)
{
- return string.Equals(typeText, "string", StringComparison.OrdinalIgnoreCase);
+ return string.Equals(typeText.Trim(), "string", StringComparison.OrdinalIgnoreCase);
}
internal override object TryParseFrom(string cellText)
diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TType.cs b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TType.cs
index 6d3eebb..5af269d 100644
--- a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TType.cs
+++ b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TType.cs
@@ -28,7 +28,6 @@ namespace Tools.ExcelResolver.Editor
///
internal abstract object TryParseFrom(string cellText);
-
internal TType(string typeText = null)
{
var type = typeText?.Split(',', StringSplitOptions.RemoveEmptyEntries);
diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TVector2.cs b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TVector2.cs
index 79ea3c1..38fe22e 100644
--- a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TVector2.cs
+++ b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TVector2.cs
@@ -5,14 +5,15 @@ namespace Tools.ExcelResolver.Editor
{
internal class TVector2 : TType
{
- public TVector2(string typeText) : base(typeText) { }
+ public TVector2() { }
+ public TVector2(string typeText = null) : base(typeText) { }
internal override Type RealType => typeof(Vector2);
internal override object DefaultValue => Vector2.zero;
internal override string FieldWriteFormat => "Vector2";
internal override bool String2TType(string typeText)
{
- return string.Equals(typeText, "vector2", StringComparison.OrdinalIgnoreCase);
+ return string.Equals(typeText.Trim(), "vector2", StringComparison.OrdinalIgnoreCase);
}
internal override object TryParseFrom(string cellText)
diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TVector3.cs b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TVector3.cs
index e24ba21..dc01f74 100644
--- a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TVector3.cs
+++ b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Types/TVector3.cs
@@ -5,23 +5,19 @@ namespace Tools.ExcelResolver.Editor
{
internal class TVector3 : TType
{
- public TVector3(string typeText) : base(typeText) { }
+ public TVector3() { }
+ public TVector3(string typeText = null) : base(typeText) { }
internal override Type RealType => typeof(Vector3);
internal override object DefaultValue => Vector3.zero;
internal override string FieldWriteFormat => "Vector3";
internal override bool String2TType(string typeText)
{
- return string.Equals(typeText, "vector3", StringComparison.OrdinalIgnoreCase);
+ return string.Equals(typeText.Trim(), "vector3", StringComparison.OrdinalIgnoreCase);
}
internal override object TryParseFrom(string cellText)
{
- if (!cellText.StartsWith("(") || !cellText.EndsWith(")"))
- {
- return null;
- }
-
cellText = cellText[1..^1];
var split = cellText.Split(',');
if (split.Length != 3)
diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.TType.cs b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.TType.cs
index b0a6eb4..287c4d3 100644
--- a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.TType.cs
+++ b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.TType.cs
@@ -8,6 +8,7 @@ namespace Tools.ExcelResolver.Editor
internal static partial class ExcelResolverUtil
{
private static TType[] _allTTypes;
+ private static Type[] _enumTypes;
private static ExcelRange _currentCell;
private static string _currentClassName;
@@ -16,7 +17,21 @@ namespace Tools.ExcelResolver.Editor
return Assembly.GetAssembly(typeof(TType))
.GetTypes()
.Where(t => t.IsSubclassOf(typeof(TType)) && !t.IsAbstract)
- .Select(t => Activator.CreateInstance(t, string.Empty) as TType)
+ .Select(t => Activator.CreateInstance(t) as TType)
+ .ToArray();
+ }
+
+ internal static Type[] GetAllEnumTypes()
+ {
+ return AppDomain.CurrentDomain.GetAssemblies()
+ .Where(a => a.GetName().Name
+ // is "UnityEngine"
+ is "Assembly-CSharp")
+ // or "Assembly-CSharp-firstpass"
+ // or "Assembly-CSharp-Editor"
+ // or "Assembly-CSharp-Editor-firstpass")
+ .SelectMany(a => a.GetTypes())
+ .Where(t => t.IsEnum)
.ToArray();
}
@@ -29,7 +44,6 @@ namespace Tools.ExcelResolver.Editor
{
_currentCell = cell ?? _currentCell;
_currentClassName = className ?? _currentClassName;
- targetText = targetText.ToLower();
_allTTypes ??= GetAllTTypes();
foreach (var tType in _allTTypes)
@@ -39,6 +53,15 @@ namespace Tools.ExcelResolver.Editor
return Activator.CreateInstance(tType.GetType(), targetText) as TType;
}
}
+
+ _enumTypes ??= GetAllEnumTypes();
+ foreach (var enumType in _enumTypes)
+ {
+ if (string.Equals(enumType.Name, targetText, StringComparison.OrdinalIgnoreCase))
+ {
+ return Activator.CreateInstance(typeof(TEnum), targetText, enumType) as TType;
+ }
+ }
throw new Exception($"type定义错误 " +
$"className: '{_currentClassName}' " +
diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Type.cs b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Type.cs
index f9c7bd4..4707ac6 100644
--- a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Type.cs
+++ b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Type.cs
@@ -3,6 +3,12 @@ using System.Collections.Generic;
using System.Linq;
using UnityEngine;
+/*
+ * 此脚本与ExcelResolverUtil.TType.cs不同,TType是用来定义生成的代码的字段的(如id, name)
+ * 而此脚本是用来获取生成的代码的类(如Hero)
+ */
+
+
namespace Tools.ExcelResolver.Editor
{
internal static partial class ExcelResolverUtil
diff --git a/Assets/_Project/ExcelResolver/Excel/hero.xlsx b/Assets/_Project/ExcelResolver/Excel/hero.xlsx
index b851c0d..9764134 100644
Binary files a/Assets/_Project/ExcelResolver/Excel/hero.xlsx and b/Assets/_Project/ExcelResolver/Excel/hero.xlsx differ
diff --git a/Assets/_Project/ScriptableObject/Excel/Hero_1.asset b/Assets/_Project/ScriptableObject/Excel/Hero_1.asset
index 04db849..5fdab6e 100644
--- a/Assets/_Project/ScriptableObject/Excel/Hero_1.asset
+++ b/Assets/_Project/ScriptableObject/Excel/Hero_1.asset
@@ -23,12 +23,18 @@ MonoBehaviour:
SerializationNodes:
- Name: attribute
Entry: 7
- Data: 0|System.Collections.Generic.Dictionary`2[[System.Int32, mscorlib],[System.Int32,
- mscorlib]], mscorlib
+ Data: 0|System.Collections.Generic.Dictionary`2[[Tools.ExcelResolver.Attribute,
+ Assembly-CSharp],[System.Int32, mscorlib]], mscorlib
- Name: comparer
Entry: 7
- Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.Int32,
- mscorlib]], mscorlib
+ Data: 1|System.Collections.Generic.EnumEqualityComparer`1[[Tools.ExcelResolver.Attribute,
+ Assembly-CSharp]], mscorlib
+ - Name:
+ Entry: 12
+ Data: 0
+ - Name:
+ Entry: 13
+ Data:
- Name:
Entry: 8
Data:
@@ -40,7 +46,7 @@ MonoBehaviour:
Data:
- Name: $k
Entry: 3
- Data: 1
+ Data: 0
- Name: $v
Entry: 3
Data: 500
@@ -52,7 +58,7 @@ MonoBehaviour:
Data:
- Name: $k
Entry: 3
- Data: 2
+ Data: 1
- Name: $v
Entry: 3
Data: 300
@@ -70,8 +76,12 @@ MonoBehaviour:
Data: 2|System.Collections.Generic.Dictionary`2[[System.Int32, mscorlib],[System.Single,
mscorlib]], mscorlib
- Name: comparer
- Entry: 9
- Data: 1
+ Entry: 7
+ Data: 3|System.Collections.Generic.GenericEqualityComparer`1[[System.Int32,
+ mscorlib]], mscorlib
+ - Name:
+ Entry: 8
+ Data:
- Name:
Entry: 12
Data: 2
@@ -119,3 +129,4 @@ MonoBehaviour:
- {x: 1, y: 2}
- {x: 1, y: 2}
- {x: 1, y: 2}
+ color: 1
diff --git a/Assets/_Project/ScriptableObject/Excel/Hero_2.asset b/Assets/_Project/ScriptableObject/Excel/Hero_2.asset
index d212261..5a31fc8 100644
--- a/Assets/_Project/ScriptableObject/Excel/Hero_2.asset
+++ b/Assets/_Project/ScriptableObject/Excel/Hero_2.asset
@@ -23,12 +23,18 @@ MonoBehaviour:
SerializationNodes:
- Name: attribute
Entry: 7
- Data: 0|System.Collections.Generic.Dictionary`2[[System.Int32, mscorlib],[System.Int32,
- mscorlib]], mscorlib
+ Data: 0|System.Collections.Generic.Dictionary`2[[Tools.ExcelResolver.Attribute,
+ Assembly-CSharp],[System.Int32, mscorlib]], mscorlib
- Name: comparer
Entry: 7
- Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.Int32,
- mscorlib]], mscorlib
+ Data: 1|System.Collections.Generic.EnumEqualityComparer`1[[Tools.ExcelResolver.Attribute,
+ Assembly-CSharp]], mscorlib
+ - Name:
+ Entry: 12
+ Data: 0
+ - Name:
+ Entry: 13
+ Data:
- Name:
Entry: 8
Data:
@@ -46,8 +52,12 @@ MonoBehaviour:
Data: 2|System.Collections.Generic.Dictionary`2[[System.Int32, mscorlib],[System.Single,
mscorlib]], mscorlib
- Name: comparer
- Entry: 9
- Data: 1
+ Entry: 7
+ Data: 3|System.Collections.Generic.GenericEqualityComparer`1[[System.Int32,
+ mscorlib]], mscorlib
+ - Name:
+ Entry: 8
+ Data:
- Name:
Entry: 12
Data: 0
@@ -67,3 +77,4 @@ MonoBehaviour:
pos: {x: 0, y: 0, z: 0}
ches: {x: 0, y: 0}
attack_target: []
+ color: 0
diff --git a/Assets/_Project/ScriptableObject/Excel/Hero_3.asset b/Assets/_Project/ScriptableObject/Excel/Hero_3.asset
index 5b509d3..48718c7 100644
--- a/Assets/_Project/ScriptableObject/Excel/Hero_3.asset
+++ b/Assets/_Project/ScriptableObject/Excel/Hero_3.asset
@@ -23,12 +23,18 @@ MonoBehaviour:
SerializationNodes:
- Name: attribute
Entry: 7
- Data: 0|System.Collections.Generic.Dictionary`2[[System.Int32, mscorlib],[System.Int32,
- mscorlib]], mscorlib
+ Data: 0|System.Collections.Generic.Dictionary`2[[Tools.ExcelResolver.Attribute,
+ Assembly-CSharp],[System.Int32, mscorlib]], mscorlib
- Name: comparer
Entry: 7
- Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.Int32,
- mscorlib]], mscorlib
+ Data: 1|System.Collections.Generic.EnumEqualityComparer`1[[Tools.ExcelResolver.Attribute,
+ Assembly-CSharp]], mscorlib
+ - Name:
+ Entry: 12
+ Data: 0
+ - Name:
+ Entry: 13
+ Data:
- Name:
Entry: 8
Data:
@@ -58,8 +64,12 @@ MonoBehaviour:
Data: 2|System.Collections.Generic.Dictionary`2[[System.Int32, mscorlib],[System.Single,
mscorlib]], mscorlib
- Name: comparer
- Entry: 9
- Data: 1
+ Entry: 7
+ Data: 3|System.Collections.Generic.GenericEqualityComparer`1[[System.Int32,
+ mscorlib]], mscorlib
+ - Name:
+ Entry: 8
+ Data:
- Name:
Entry: 12
Data: 0
@@ -80,3 +90,4 @@ MonoBehaviour:
ches: {x: 5, y: 12}
attack_target:
- {x: 1, y: 2}
+ color: 23
diff --git a/Assets/_Project/Scripts/ExcelResolverEnum.cs b/Assets/_Project/Scripts/ExcelResolverEnum.cs
new file mode 100644
index 0000000..c29c4f7
--- /dev/null
+++ b/Assets/_Project/Scripts/ExcelResolverEnum.cs
@@ -0,0 +1,18 @@
+namespace Tools.ExcelResolver
+{
+ public enum CustomizeColor
+ {
+ yellow = 0,
+ red = 1,
+ green = 2,
+ blue = 3,
+ }
+
+ public enum Attribute
+ {
+ hp = 0,
+ atk = 1,
+ speed = 2,
+ def = 3,
+ }
+}
\ No newline at end of file
diff --git a/Assets/_Project/Scripts/ExcelResolverEnum.cs.meta b/Assets/_Project/Scripts/ExcelResolverEnum.cs.meta
new file mode 100644
index 0000000..4a7b517
--- /dev/null
+++ b/Assets/_Project/Scripts/ExcelResolverEnum.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 81d32f9fda7b4ebaaf639491e017be02
+timeCreated: 1737819941
\ No newline at end of file
diff --git a/Assets/_Project/Scripts/Generator/Excel/Hero.cs b/Assets/_Project/Scripts/Generator/Excel/Hero.cs
index 57ebe21..601cc38 100644
--- a/Assets/_Project/Scripts/Generator/Excel/Hero.cs
+++ b/Assets/_Project/Scripts/Generator/Excel/Hero.cs
@@ -73,11 +73,16 @@ namespace Tools.ExcelResolver
///
///
///
- public Dictionary attribute;
+ public Dictionary attribute;
///
/// 你好
///
public Dictionary nihao;
+
+ ///
+ ///
+ ///
+ public CustomizeColor color;
}
}