diff --git a/Assets/ExcelResolver/Excel/hero.xlsx b/Assets/ExcelResolver/Excel/hero.xlsx index 5fbf868..6c281b5 100644 Binary files a/Assets/ExcelResolver/Excel/hero.xlsx and b/Assets/ExcelResolver/Excel/hero.xlsx differ diff --git a/Assets/ScriptableObject/Excel/Hero_1.asset b/Assets/ScriptableObject/Excel/Hero_1.asset index 504a333..abff05d 100644 --- a/Assets/ScriptableObject/Excel/Hero_1.asset +++ b/Assets/ScriptableObject/Excel/Hero_1.asset @@ -21,4 +21,8 @@ MonoBehaviour: speed: 1.2 pos: {x: 0, y: 1, z: 4} ches: {x: 0, y: 1} - attack_target: 01000000020000000300000004000000 + attack_target: + - 0.5 + - -2.6 + - 3 + - 4.5 diff --git a/Assets/ScriptableObject/Excel/Hero_2.asset b/Assets/ScriptableObject/Excel/Hero_2.asset index 462723a..2b3f899 100644 --- a/Assets/ScriptableObject/Excel/Hero_2.asset +++ b/Assets/ScriptableObject/Excel/Hero_2.asset @@ -21,4 +21,4 @@ MonoBehaviour: speed: 0 pos: {x: 0, y: 0, z: 0} ches: {x: 0, y: 0} - attack_target: + attack_target: [] diff --git a/Assets/ScriptableObject/Excel/Hero_3.asset b/Assets/ScriptableObject/Excel/Hero_3.asset index e59e65f..44da247 100644 --- a/Assets/ScriptableObject/Excel/Hero_3.asset +++ b/Assets/ScriptableObject/Excel/Hero_3.asset @@ -21,4 +21,5 @@ MonoBehaviour: speed: 1.1 pos: {x: 3, y: 2, z: 4} ches: {x: 5, y: 12} - attack_target: 02000000 + attack_target: + - 2.5 diff --git a/Assets/Scripts/Generator/Excel/Hero.cs b/Assets/Scripts/Generator/Excel/Hero.cs index 6e1f846..55fead2 100644 --- a/Assets/Scripts/Generator/Excel/Hero.cs +++ b/Assets/Scripts/Generator/Excel/Hero.cs @@ -67,6 +67,6 @@ namespace Tools.ExcelResolver /// /// 攻击优先级 /// - public List attack_target; + public List attack_target; } } diff --git a/Assets/Scripts/Test.cs b/Assets/Scripts/Test.cs new file mode 100644 index 0000000..faa96b1 --- /dev/null +++ b/Assets/Scripts/Test.cs @@ -0,0 +1,13 @@ +using System; +using Tools.ExcelResolver; +using UnityEngine; + +public class Test : MonoBehaviour +{ + public Hero hero; + + private void Start() + { + var a = hero.speed; + } +} \ No newline at end of file diff --git a/Assets/Scripts/Test.cs.meta b/Assets/Scripts/Test.cs.meta new file mode 100644 index 0000000..293a04e --- /dev/null +++ b/Assets/Scripts/Test.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: aec833e1dd444669b614d6c2222c59b6 +timeCreated: 1737794427 \ No newline at end of file diff --git a/Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Types/TList.cs b/Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Types/TList.cs index 753de1b..fe644d4 100644 --- a/Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Types/TList.cs +++ b/Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Types/TList.cs @@ -1,28 +1,28 @@ using System; +using System.Collections; using System.Collections.Generic; namespace Tools.ExcelResolver.Editor { internal class TList : TType { - internal override Type RealType => typeof(List); - internal override string FieldWriteFormat => "List"; - internal override object DefaultValue => new List(); + internal override Type RealType => typeof(List<>).MakeGenericType(InnerType.RealType); + internal override string FieldWriteFormat => $"List<{InnerType.RealType.Name}>"; + internal override object DefaultValue => Activator.CreateInstance(typeof(List<>).MakeGenericType(InnerType.RealType)); + + internal TType InnerType { get; set; } internal override bool String2TType(string typeText) { - var split = typeText.Split('|'); - if (split.Length != 2) + var split = typeText.Split(','); + if (split.Length < 2 || !string.Equals(split[0], "list", StringComparison.OrdinalIgnoreCase)) { return false; } - if (!string.Equals(split[0], "list", StringComparison.OrdinalIgnoreCase) || !string.Equals(split[1], "int", StringComparison.OrdinalIgnoreCase)) - { - return false; - } + InnerType = ExcelResolverUtil.GetTTypeByString(split[1]); - return true; + return InnerType != null; } internal override object TryParseFrom(string cellText) @@ -30,16 +30,17 @@ namespace Tools.ExcelResolver.Editor var split = cellText.Split('|'); if (split.Length > 0) { - var list = new List(); + var list = (IList)Activator.CreateInstance(typeof(List<>).MakeGenericType(InnerType.RealType)); foreach (var s in split) { - if (int.TryParse(s, out var result)) + var parsedValue = InnerType.TryParseFrom(s); + if (parsedValue != null) { - list.Add(result); + list.Add(parsedValue); } else { - return null; + return null; // 任意一个解析失败则返回null } }