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; } }