From 8e6f643e46bd85721c6784529027312bfa62bdb9 Mon Sep 17 00:00:00 2001 From: coffee <985942825@qq.com> Date: Tue, 28 Jan 2025 02:23:03 +0800 Subject: [PATCH] =?UTF-8?q?MultiKeyTable=E7=9A=84=E7=94=9F=E6=88=90?= =?UTF-8?q?=E4=B8=8E=E6=A3=80=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Editor/Core/Data/FieldData.cs | 3 +- .../Core/Util/ExcelResolverUtil.Cell.cs | 5 +- .../ExcelResolverEditorWindow.ReadExcel.cs | 85 +++-- .../ExcelResolverEditorWindow.WriteDataSO.cs | 25 +- ...ExcelResolverEditorWindow.WriteUtilCode.cs | 46 ++- .../ExcelResolverEditorWindow.WriteUtilSO.cs | 114 ++++++- Assets/_Project/ExcelResolver/Excel/hero.xlsx | Bin 21147 -> 21138 bytes .../_Project/ExcelResolver/Excel/monster.xlsx | Bin 12099 -> 11796 bytes .../ExcelResolver/Excel/monster2.xlsx | Bin 0 -> 12086 bytes .../ExcelResolver/Excel/monster2.xlsx.meta | 7 + .../{Monster_1_.asset => Monster_1_1.asset} | 4 +- ...r_3_.asset.meta => Monster_1_1.asset.meta} | 2 +- .../{Monster_4_.asset => Monster_1_2.asset} | 6 +- ...r_1_.asset.meta => Monster_1_2.asset.meta} | 2 +- .../{Monster_3_.asset => Monster_2_1.asset} | 6 +- ...r_4_.asset.meta => Monster_2_1.asset.meta} | 2 +- .../{Monster_2_.asset => Monster_2_2.asset} | 76 ++++- ...r_2_.asset.meta => Monster_2_2.asset.meta} | 2 +- .../Excel/Monster/Monster_3_1.asset | 133 ++++++++ .../Excel/Monster/Monster_3_1.asset.meta | 8 + .../Excel/Monster/Monster_3_2.asset | 133 ++++++++ .../Excel/Monster/Monster_3_2.asset.meta | 8 + .../Excel/Monster/Monster__.asset.meta | 8 - .../Excel/Monster/_MonsterUtil.asset | 163 +++++++++- .../ScriptableObject/Excel/Monster2.meta | 8 + .../Excel/Monster2/Monster2_1_1_1.asset | 134 ++++++++ .../Excel/Monster2/Monster2_1_1_1.asset.meta | 8 + .../Excel/Monster2/Monster2_1_1_2.asset | 134 ++++++++ .../Excel/Monster2/Monster2_1_1_2.asset.meta | 8 + .../Excel/Monster2/Monster2_1_1_3.asset | 134 ++++++++ .../Excel/Monster2/Monster2_1_1_3.asset.meta | 8 + .../Excel/Monster2/Monster2_1_2_1.asset | 134 ++++++++ .../Excel/Monster2/Monster2_1_2_1.asset.meta | 8 + .../Excel/Monster2/Monster2_1_2_3.asset | 134 ++++++++ .../Excel/Monster2/Monster2_1_2_3.asset.meta | 8 + .../Excel/Monster2/Monster2_1_2_4.asset | 134 ++++++++ .../Excel/Monster2/Monster2_1_2_4.asset.meta | 8 + .../Monster2_2_1_1.asset} | 42 ++- .../Excel/Monster2/Monster2_2_1_1.asset.meta | 8 + .../Excel/Monster2/Monster2_2_2_1.asset | 134 ++++++++ .../Excel/Monster2/Monster2_2_2_1.asset.meta | 8 + .../Excel/Monster2/Monster2_3_1_1.asset | 134 ++++++++ .../Excel/Monster2/Monster2_3_1_1.asset.meta | 8 + .../Excel/Monster2/Monster2_3_2_1.asset | 134 ++++++++ .../Excel/Monster2/Monster2_3_2_1.asset.meta | 8 + .../Excel/Monster2/_Monster2Util.asset | 305 ++++++++++++++++++ .../Excel/Monster2/_Monster2Util.asset.meta | 8 + .../Scripts/Generator/Excel/HeroUtil.cs | 2 +- .../Scripts/Generator/Excel/Monster2.cs | 98 ++++++ .../Scripts/Generator/Excel/Monster2.cs.meta | 2 + .../Scripts/Generator/Excel/Monster2Util.cs | 25 ++ .../Generator/Excel/Monster2Util.cs.meta | 2 + .../Scripts/Generator/Excel/MonsterUtil.cs | 2 + 53 files changed, 2529 insertions(+), 89 deletions(-) create mode 100644 Assets/_Project/ExcelResolver/Excel/monster2.xlsx create mode 100644 Assets/_Project/ExcelResolver/Excel/monster2.xlsx.meta rename Assets/_Project/ScriptableObject/Excel/Monster/{Monster_1_.asset => Monster_1_1.asset} (98%) rename Assets/_Project/ScriptableObject/Excel/Monster/{Monster_3_.asset.meta => Monster_1_1.asset.meta} (79%) rename Assets/_Project/ScriptableObject/Excel/Monster/{Monster_4_.asset => Monster_1_2.asset} (98%) rename Assets/_Project/ScriptableObject/Excel/Monster/{Monster_1_.asset.meta => Monster_1_2.asset.meta} (79%) rename Assets/_Project/ScriptableObject/Excel/Monster/{Monster_3_.asset => Monster_2_1.asset} (98%) rename Assets/_Project/ScriptableObject/Excel/Monster/{Monster_4_.asset.meta => Monster_2_1.asset.meta} (79%) rename Assets/_Project/ScriptableObject/Excel/Monster/{Monster_2_.asset => Monster_2_2.asset} (64%) rename Assets/_Project/ScriptableObject/Excel/Monster/{Monster_2_.asset.meta => Monster_2_2.asset.meta} (79%) create mode 100644 Assets/_Project/ScriptableObject/Excel/Monster/Monster_3_1.asset create mode 100644 Assets/_Project/ScriptableObject/Excel/Monster/Monster_3_1.asset.meta create mode 100644 Assets/_Project/ScriptableObject/Excel/Monster/Monster_3_2.asset create mode 100644 Assets/_Project/ScriptableObject/Excel/Monster/Monster_3_2.asset.meta delete mode 100644 Assets/_Project/ScriptableObject/Excel/Monster/Monster__.asset.meta create mode 100644 Assets/_Project/ScriptableObject/Excel/Monster2.meta create mode 100644 Assets/_Project/ScriptableObject/Excel/Monster2/Monster2_1_1_1.asset create mode 100644 Assets/_Project/ScriptableObject/Excel/Monster2/Monster2_1_1_1.asset.meta create mode 100644 Assets/_Project/ScriptableObject/Excel/Monster2/Monster2_1_1_2.asset create mode 100644 Assets/_Project/ScriptableObject/Excel/Monster2/Monster2_1_1_2.asset.meta create mode 100644 Assets/_Project/ScriptableObject/Excel/Monster2/Monster2_1_1_3.asset create mode 100644 Assets/_Project/ScriptableObject/Excel/Monster2/Monster2_1_1_3.asset.meta create mode 100644 Assets/_Project/ScriptableObject/Excel/Monster2/Monster2_1_2_1.asset create mode 100644 Assets/_Project/ScriptableObject/Excel/Monster2/Monster2_1_2_1.asset.meta create mode 100644 Assets/_Project/ScriptableObject/Excel/Monster2/Monster2_1_2_3.asset create mode 100644 Assets/_Project/ScriptableObject/Excel/Monster2/Monster2_1_2_3.asset.meta create mode 100644 Assets/_Project/ScriptableObject/Excel/Monster2/Monster2_1_2_4.asset create mode 100644 Assets/_Project/ScriptableObject/Excel/Monster2/Monster2_1_2_4.asset.meta rename Assets/_Project/ScriptableObject/Excel/{Monster/Monster__.asset => Monster2/Monster2_2_1_1.asset} (77%) create mode 100644 Assets/_Project/ScriptableObject/Excel/Monster2/Monster2_2_1_1.asset.meta create mode 100644 Assets/_Project/ScriptableObject/Excel/Monster2/Monster2_2_2_1.asset create mode 100644 Assets/_Project/ScriptableObject/Excel/Monster2/Monster2_2_2_1.asset.meta create mode 100644 Assets/_Project/ScriptableObject/Excel/Monster2/Monster2_3_1_1.asset create mode 100644 Assets/_Project/ScriptableObject/Excel/Monster2/Monster2_3_1_1.asset.meta create mode 100644 Assets/_Project/ScriptableObject/Excel/Monster2/Monster2_3_2_1.asset create mode 100644 Assets/_Project/ScriptableObject/Excel/Monster2/Monster2_3_2_1.asset.meta create mode 100644 Assets/_Project/ScriptableObject/Excel/Monster2/_Monster2Util.asset create mode 100644 Assets/_Project/ScriptableObject/Excel/Monster2/_Monster2Util.asset.meta create mode 100644 Assets/_Project/Scripts/Generator/Excel/Monster2.cs create mode 100644 Assets/_Project/Scripts/Generator/Excel/Monster2.cs.meta create mode 100644 Assets/_Project/Scripts/Generator/Excel/Monster2Util.cs create mode 100644 Assets/_Project/Scripts/Generator/Excel/Monster2Util.cs.meta diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Data/FieldData.cs b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Data/FieldData.cs index db2366a..0195c0e 100644 --- a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Data/FieldData.cs +++ b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Data/FieldData.cs @@ -6,10 +6,9 @@ namespace Tools.ExcelResolver.Editor internal class FieldData : IDisposable { public int colIndex; - public bool isKey; public string varName; - public string typeString; + // public string typeString; public TType type; public string info; public string description; 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 ca3e932..4fd9ae5 100644 --- a/Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Cell.cs +++ b/Assets/Unity-Tools/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Cell.cs @@ -43,8 +43,11 @@ namespace Tools.ExcelResolver.Editor var values = new Dictionary(endRow); for (int row = 1; row <= endRow; row++) { + var first = worksheet.Cells[row, 1].Text; + // 结束 + if (string.Equals(first, "end", StringComparison.OrdinalIgnoreCase)) break; // 跳过注释行 - if (worksheet.Cells[row, 1].Text == "##" || string.IsNullOrEmpty(worksheet.Cells[row, col].Text)) continue; + if (first.StartsWith("##")) continue; string value = worksheet.Cells[row, col].Text.Trim(); values.Add(row, value); } diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs index acda6ed..c8fb720 100644 --- a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs +++ b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs @@ -13,7 +13,7 @@ namespace Tools.ExcelResolver.Editor { public sealed partial class ExcelResolverEditorWindow { - private void ReadExcel() + private void ReadExcel(bool onlyGetClassCodeData = false) { classCodeDataDict = new Dictionary(); @@ -52,8 +52,11 @@ namespace Tools.ExcelResolver.Editor classCodeData.fields = GetFieldData(worksheet, classCodeData); classCodeData.tableType = CheckTableTypeAndSetKeyField(worksheet, classCodeData); - WriteDataCode(classCodeData); - WriteSOCode(classCodeData); + if (!onlyGetClassCodeData) + { + WriteDataCode(classCodeData); + WriteSOCode(classCodeData); + } classCodeDataDict.Add(worksheet, classCodeData); Debug.Log($"读取Excel文件:'{excelFile.Name}',并生成代码"); } @@ -87,12 +90,15 @@ namespace Tools.ExcelResolver.Editor private void Update() { - if (isCompilationFinished && System.AppDomain.CurrentDomain.GetAssemblies() - .Any(a => a.GetName().Name == "Assembly-CSharp")) + if (isCompilationFinished) { - isCompilationFinished = false; - Debug.Log("Assembly-CSharp加载完成,开始写入SO数据"); - WriteDataSO(); + var assemblies = AppDomain.CurrentDomain.GetAssemblies(); + if (assemblies.Any(a => a.GetName().Name == "Assembly-CSharp")) + { + isCompilationFinished = false; + Debug.Log("Assembly-CSharp加载完成,开始写入SO数据"); + WriteDataSO(); + } } } @@ -110,38 +116,75 @@ namespace Tools.ExcelResolver.Editor var key = configs[1]; classCodeData.keyField = new FieldData[] { classCodeData.fields.FirstOrDefault(f => f.Value.varName == key).Value }; Assert.IsTrue(classCodeData.keyField[0] != null, $"'{classCodeData.className}'配置错误,主键字段不存在或重复"); - // 判断主键是否有重复值 + // 判断主键是否有重复值或空值 var keyDict = ExcelResolverUtil.ReadColumn(worksheet, classCodeData.keyField[0].colIndex); + + // 检查是否有空值 + var emptyKey = keyDict.Where(p => string.IsNullOrEmpty(p.Value)); + Assert.IsTrue(emptyKey.Count() <= 0, $"'{classCodeData.className}'主键字段在第'{string.Join(",", emptyKey.Select(p => p.Key))}'行存在空值"); + var duplicateValues = keyDict.GroupBy(x => x.Value).Where(g => g.Count() > 1); foreach (var duplicateValue in duplicateValues) { - throw new Exception($"'{classCodeData.className}'主键字段存在重复值:'{duplicateValue.Key}' " + - $"行号:{string.Join(",", duplicateValue.Select(g => g.Key))}"); + Debug.LogError($"'{classCodeData.className}'主键字段存在重复值:'{duplicateValue.Key}' " + + $"行号:{string.Join(",", duplicateValue.Select(g => g.Key))}"); } + Assert.IsTrue(duplicateValues.Count() <= 0); } - else if (config.Contains("UnionMultiKeyTable")) + else if (config.Contains("UnionMultiKeyTable") || config.Contains("MultiKeyTable")) { - tableType = TableType.UnionMultiKeyTable; + tableType = config.Contains("UnionMultiKeyTable") ? TableType.UnionMultiKeyTable : TableType.MultiKeyTable; var configs = config.Split("|"); - Assert.IsTrue(configs.Length >= 3, $"'{classCodeData.className}'配置错误,UnionMultiKeyTable至少有两个主键"); + Assert.IsTrue(configs.Length >= 3, $"'{classCodeData.className}'配置错误,UnionMultiKeyTable至少有两个主键"); var keys = configs[1..]; classCodeData.keyField = keys.Select(key => { var field = classCodeData.fields.FirstOrDefault(f => f.Value.varName == key); - Assert.IsTrue(field.Value != null, $"'{classCodeData.className}'配置错误,主键字段不存在"); + Assert.IsTrue(field.Value != null, $"'{classCodeData.className}'配置错误,主键字段不存在"); return field.Value; }).ToArray(); - // 判断主键是否有重复值或缺失 + + // 判断主键是否有重复值或空值 var keyDictList = new List>(); foreach (var keyField in classCodeData.keyField) { keyDictList.Add(ExcelResolverUtil.ReadColumn(worksheet, keyField.colIndex)); } + for (int i = 0; i < keyDictList.Count; i++) + { + Dictionary keyDict = keyDictList[i]; + var keyField = classCodeData.keyField[i]; + + // 检查是否有空值 + var emptyKey = keyDict.Where(p => string.IsNullOrEmpty(p.Value)); + Assert.IsTrue(emptyKey.Count() <= 0, $"'{classCodeData.className}'主键字段 '{keyField.varName}' 在 '{string.Join(",", emptyKey.Select(p => p.Key))}' 存在空值"); + + /* + // 检查是否有重复值 + var duplicates = keyDict.GroupBy(v => v.Value).Where(g => g.Count() > 1); + foreach (var duplicate in duplicates) + { + Debug.LogError($"'{classCodeData.className}'主键字段 '{keyField.varName}' 存在重复值: '{duplicate.Key}' " + + $"行号:{string.Join(",", duplicate.Select(g => g.Key))}"); + } + Assert.IsTrue(duplicates.Count() <= 0);*/ + } - } - else if (config.Contains("MultiKeyTable")) - { - tableType = TableType.MultiKeyTable; + // 检查组合是否唯一 + var combinedKeys = new HashSet(); + foreach (var pair in keyDictList[0]) + { + var combinedKey = string.Join("_", keyDictList.Select(dict => dict[pair.Key])); + if (combinedKeys.Contains(combinedKey)) + { + Debug.LogError($"'{classCodeData.className}'主键在行 '{pair.Key}' 存在重复组合: '{combinedKey}'"); + } + else + { + combinedKeys.Add(combinedKey); + } + } + Assert.IsTrue(combinedKeys.Count == keyDictList[0].Count); } else if (config.Contains("NotKetTable")) { @@ -172,7 +215,7 @@ namespace Tools.ExcelResolver.Editor { colIndex = col, varName = cellText, - typeString = worksheet.Cells[3, col].Text, + // typeString = worksheet.Cells[3, col].Text, type = ExcelResolverUtil.GetTTypeByString(worksheet.Cells[3, col].Text, worksheet.Cells[3, col], classCodeData.className), info = worksheet.Cells[4, col].Text, description = worksheet.Cells[5, col].Text, diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataSO.cs b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataSO.cs index 54e593f..a050249 100644 --- a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataSO.cs +++ b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataSO.cs @@ -13,10 +13,14 @@ namespace Tools.ExcelResolver.Editor public sealed partial class ExcelResolverEditorWindow { [FoldoutGroup("Hide Setting")] - [ShowInInspector] private Dictionary classCodeDataDict = new(); + [ShowInInspector] private Dictionary classCodeDataDict; private void WriteDataSO() { + if (classCodeDataDict == null) + { + ReadExcel(true); + } foreach (var classCodeDataDictPair in classCodeDataDict) { var worksheet = classCodeDataDictPair.Key; @@ -39,8 +43,11 @@ namespace Tools.ExcelResolver.Editor for (int row = 1; row <= worksheet.Dimension.End.Row; row++) { + var first = worksheet.Cells[row, 1].Text; + // 结束 + if (string.Equals(first, "end", StringComparison.OrdinalIgnoreCase)) break; // 跳过注释行 - if (worksheet.Cells[row, 1].Text.StartsWith("##")) continue; + if (first.StartsWith("##")) continue; var assetName = getAssetName(worksheet, row, classCodeData); var fullPath = $"{path}{assetName}.asset"; @@ -58,7 +65,7 @@ namespace Tools.ExcelResolver.Editor ScriptableObject instance = ScriptableObject.CreateInstance(dataName); set(instance, worksheet, row, classCodeData); AssetDatabase.CreateAsset(instance, fullPath); - Debug.Log($"创建:{assetName}", instance); + Debug.Log($"创建:{assetName}", instance); result.Add(instance); } } @@ -103,7 +110,7 @@ namespace Tools.ExcelResolver.Editor return $"{classCodeData.className}_{key}"; break; } - case TableType.UnionMultiKeyTable: + case TableType.UnionMultiKeyTable or TableType.MultiKeyTable: { var sb = new StringBuilder(); sb.Append(classCodeData.className); @@ -119,12 +126,10 @@ namespace Tools.ExcelResolver.Editor return sb.ToString(); break; } - // case TableType.MultiKeyTable: - // return $"{classCodeData.className}_{classCodeData.keyField[0].varName}"; - // case TableType.NotKetTable: - // return classCodeData.className; - // case TableType.ColumnTable: - // return $"{classCodeData.className}_{classCodeData.fields[2].Value.varName}"; + case TableType.NotKetTable: + return classCodeData.className; + case TableType.ColumnTable: + return $"{classCodeData.className}_{classCodeData.fields[2].varName}"; } diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteUtilCode.cs b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteUtilCode.cs index 400bf77..b2cd7d4 100644 --- a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteUtilCode.cs +++ b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteUtilCode.cs @@ -62,17 +62,53 @@ namespace Tools.ExcelResolver.Editor switch (classCodeData.tableType) { case TableType.SingleKeyTable: - FieldData keyField = classCodeData.fields.First().Value; - CodeMemberField codeField = new CodeMemberField($"Dictionary<{keyField.typeString}, {classCodeData.className}>", "Data") - { - Attributes = MemberAttributes.Public, - }; + { + FieldData keyField = classCodeData.keyField.First(); + CodeMemberField codeField = + new CodeMemberField($"Dictionary<{keyField.type.FieldWriteFormat}, {classCodeData.className}>", "Data") + { + Attributes = MemberAttributes.Public, + }; codeFields.Add(codeField); break; + } case TableType.UnionMultiKeyTable: + { + var sb = new System.Text.StringBuilder(); + foreach (var keyField in classCodeData.keyField) + { + sb.Append(keyField.type.FieldWriteFormat); + sb.Append(", "); + } + sb.Remove(sb.Length - 2, 2); + CodeMemberField codeField = + new CodeMemberField($"Dictionary<({sb}), {classCodeData.className}>", "Data") + { + Attributes = MemberAttributes.Public, + }; + codeFields.Add(codeField); break; + } case TableType.MultiKeyTable: + { + // 获取所有键的类型 + var keyTypes = classCodeData.keyField.Select(k => k.type.FieldWriteFormat).ToList(); + + // 动态生成嵌套字典的类型字符串 + string dictType = classCodeData.className; // 最内层的值类型 + for (int i = keyTypes.Count - 1; i >= 0; i--) + { + dictType = $"Dictionary<{keyTypes[i]}, {dictType}>"; + } + + // 创建字段 + CodeMemberField codeField = new CodeMemberField(dictType, "Data") + { + Attributes = MemberAttributes.Public, + }; + codeFields.Add(codeField); break; + } case TableType.NotKetTable: break; case TableType.ColumnTable: diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteUtilSO.cs b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteUtilSO.cs index 8340afd..cc64bda 100644 --- a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteUtilSO.cs +++ b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteUtilSO.cs @@ -1,6 +1,7 @@ using System; using System.Collections; using System.Collections.Generic; +using System.Linq; using UnityEditor; using UnityEngine; @@ -23,20 +24,131 @@ namespace Tools.ExcelResolver.Editor switch (classCodeData.tableType) { case TableType.SingleKeyTable: + { var keyField = classCodeData.keyField[0]; var dict = (IDictionary)Activator.CreateInstance(typeof(Dictionary<,>).MakeGenericType(keyField.type.RealType, assets[0].GetType())); - + foreach (var asset in assets) { var key = asset.GetType().GetField(keyField.varName).GetValue(asset); dict[key] = asset; } + instance.GetType().GetField("Data").SetValue(instance, dict); break; + } case TableType.UnionMultiKeyTable: + { + // 获取所有键的类型 + var keyFields = classCodeData.keyField.Select(k => k.type.RealType).ToArray(); + + // 动态生成 ValueTuple 类型 + Type tupleType; + switch (keyFields.Length) + { + case 1: + tupleType = typeof(ValueTuple<>).MakeGenericType(keyFields); + break; + case 2: + tupleType = typeof(ValueTuple<,>).MakeGenericType(keyFields); + break; + case 3: + tupleType = typeof(ValueTuple<,,>).MakeGenericType(keyFields); + break; + case 4: + tupleType = typeof(ValueTuple<,,,>).MakeGenericType(keyFields); + break; + case 5: + tupleType = typeof(ValueTuple<,,,,>).MakeGenericType(keyFields); + break; + case 6: + tupleType = typeof(ValueTuple<,,,,,>).MakeGenericType(keyFields); + break; + case 7: + tupleType = typeof(ValueTuple<,,,,,,>).MakeGenericType(keyFields); + break; + case 8: + tupleType = typeof(ValueTuple<,,,,,,,>).MakeGenericType(keyFields); + break; + default: + throw new NotSupportedException("ValueTuple supports up to 8 generic parameters."); + } + // 创建字典类型,键为 Tuple,值为资产类型 + var dictType = typeof(Dictionary<,>).MakeGenericType(tupleType, assets[0].GetType()); + var dict = (IDictionary)Activator.CreateInstance(dictType); + + foreach (var asset in assets) + { + // 获取每个键的值 + var keyValues = classCodeData.keyField.Select(k => asset.GetType().GetField(k.varName).GetValue(asset)).ToArray(); + + // 创建 Tuple 实例 + var tupleInstance = Activator.CreateInstance(tupleType, keyValues); + + // 将 Tuple 作为键,资产作为值,添加到字典中 + dict[tupleInstance] = asset; + } + + instance.GetType().GetField("Data").SetValue(instance, dict); break; + } case TableType.MultiKeyTable: + { + // 获取所有键的类型 + var keyTypes = classCodeData.keyField.Select(k => k.type.RealType).ToArray(); + var assetType = assets[0].GetType(); + + // 递归创建嵌套字典类型 + Type CreateNestedDictionaryType(Type[] keyTypes, Type valueType, int index = 0) + { + if (index == keyTypes.Length - 1) + { + // 最内层字典:Dictionary + return typeof(Dictionary<,>).MakeGenericType(keyTypes[index], valueType); + } + else + { + // 外层字典:Dictionary> + var innerDictType = CreateNestedDictionaryType(keyTypes, valueType, index + 1); + return typeof(Dictionary<,>).MakeGenericType(keyTypes[index], innerDictType); + } + } + + // 创建嵌套字典实例 + var dictType = CreateNestedDictionaryType(keyTypes, assetType); + var dict = (IDictionary)Activator.CreateInstance(dictType); + + // 递归设置嵌套字典的值 + void SetNestedValue(IDictionary currentDict, object asset, FieldData[] keyFields, int index = 0) + { + var key = asset.GetType().GetField(keyFields[index].varName).GetValue(asset); + if (index == keyFields.Length - 1) + { + // 最内层字典:直接设置值 + currentDict[key] = asset; + } + else + { + // 外层字典:递归设置内层字典 + if (!currentDict.Contains(key)) + { + var innerDictType = CreateNestedDictionaryType(keyTypes, assetType, index + 1); + currentDict[key] = Activator.CreateInstance(innerDictType); + } + SetNestedValue((IDictionary)currentDict[key], asset, keyFields, index + 1); + } + } + + // 遍历资产并设置值 + foreach (var asset in assets) + { + SetNestedValue(dict, asset, classCodeData.keyField); + } + + // 将字典赋值给实例的 Data 字段 + instance.GetType().GetField("Data").SetValue(instance, dict); break; + } case TableType.NotKetTable: break; case TableType.ColumnTable: diff --git a/Assets/_Project/ExcelResolver/Excel/hero.xlsx b/Assets/_Project/ExcelResolver/Excel/hero.xlsx index a684677e8f0dd99f4a10ea3e69fc038eefd8a92a..323e8da9a81bd49a6d199fba253dd43fde247803 100644 GIT binary patch delta 11218 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 CA2=ld diff --git a/Assets/_Project/ExcelResolver/Excel/monster.xlsx b/Assets/_Project/ExcelResolver/Excel/monster.xlsx index 1f40baa1986edaa453be0cb6bd9df9b1166cacde..be1e890117aecbe14af7441c37a1b66eb9844390 100644 GIT binary patch delta 3044 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 K^r(-*AO2qjj50_;dS9QHIp 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 diff --git a/Assets/_Project/ExcelResolver/Excel/monster2.xlsx b/Assets/_Project/ExcelResolver/Excel/monster2.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..6c993a583a95b0e0bbffb880ff00c3c6bd3e8c4d GIT binary patch literal 12086 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 Data; + public Dictionary Data; } } diff --git a/Assets/_Project/Scripts/Generator/Excel/Monster2.cs b/Assets/_Project/Scripts/Generator/Excel/Monster2.cs new file mode 100644 index 0000000..029eba9 --- /dev/null +++ b/Assets/_Project/Scripts/Generator/Excel/Monster2.cs @@ -0,0 +1,98 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Tools.ExcelResolver +{ + using System; + using System.Collections; + using System.Collections.Generic; + using UnityEngine; + using Sirenix.OdinInspector; + + + public class Monster2 : SerializedScriptableObject, IExcelSOData + { + + /// + /// 英雄 + /// + public int id; + + /// + /// 等级 + /// + public int level; + + /// + /// 星级 + /// + public int star; + + /// + /// 名称 + /// + public string name; + + /// + /// icon + /// + public string icon; + + /// + /// 有宠物 + /// + public bool has; + + /// + /// 血量 + /// + public int hp; + + /// + /// 攻击力 + /// + public int atk; + + /// + /// 移速 + /// + public float speed; + + /// + /// 位置 + /// + public Vector3 pos; + + /// + /// 位置 + /// + public Vector2 ches; + + /// + /// 攻击优先级 + /// + public List attack_target; + + /// + /// 你好 + /// + public Dictionary nihao; + + /// + /// + /// + public Dictionary attribute; + + /// + /// + /// + public CustomizeColor color; + } +} diff --git a/Assets/_Project/Scripts/Generator/Excel/Monster2.cs.meta b/Assets/_Project/Scripts/Generator/Excel/Monster2.cs.meta new file mode 100644 index 0000000..fe1cc60 --- /dev/null +++ b/Assets/_Project/Scripts/Generator/Excel/Monster2.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: a576b35de94d3344d8fbd0763d6dd001 \ No newline at end of file diff --git a/Assets/_Project/Scripts/Generator/Excel/Monster2Util.cs b/Assets/_Project/Scripts/Generator/Excel/Monster2Util.cs new file mode 100644 index 0000000..fab1303 --- /dev/null +++ b/Assets/_Project/Scripts/Generator/Excel/Monster2Util.cs @@ -0,0 +1,25 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Tools.ExcelResolver +{ + using System; + using System.Collections; + using System.Collections.Generic; + using UnityEngine; + using Sirenix.OdinInspector; + + + public class Monster2Util : SerializedScriptableObject, IExcelSOUtil + { + + public Dictionary<(System.Int32, System.Int32, System.Int32), Monster2> Data; + } +} diff --git a/Assets/_Project/Scripts/Generator/Excel/Monster2Util.cs.meta b/Assets/_Project/Scripts/Generator/Excel/Monster2Util.cs.meta new file mode 100644 index 0000000..36ccb4d --- /dev/null +++ b/Assets/_Project/Scripts/Generator/Excel/Monster2Util.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 7198c6febd43b3e4e9bc3d03adee7ca6 \ No newline at end of file diff --git a/Assets/_Project/Scripts/Generator/Excel/MonsterUtil.cs b/Assets/_Project/Scripts/Generator/Excel/MonsterUtil.cs index 9f119da..6004c0f 100644 --- a/Assets/_Project/Scripts/Generator/Excel/MonsterUtil.cs +++ b/Assets/_Project/Scripts/Generator/Excel/MonsterUtil.cs @@ -19,5 +19,7 @@ namespace Tools.ExcelResolver public class MonsterUtil : SerializedScriptableObject, IExcelSOUtil { + + public Dictionary<(System.Int32, System.Int32), Monster> Data; } }