From 56cd42b268bf5952996f43d4e41831b6843efd77 Mon Sep 17 00:00:00 2001 From: coffee <985942825@qq.com> Date: Mon, 27 Jan 2025 03:33:41 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E5=A4=9A=E9=94=AE=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ExcelResolverEditorWindow.ReadExcel.cs | 25 +++- .../ExcelResolverEditorWindow.WriteDataSO.cs | 23 ++- Assets/_Project/ExcelResolver/Excel/hero.xlsx | Bin 21160 -> 21147 bytes .../_Project/ExcelResolver/Excel/monster.xlsx | Bin 0 -> 12099 bytes .../ExcelResolver/Excel/monster.xlsx.meta | 7 + .../ScriptableObject/Excel/Monster.meta | 8 ++ .../Excel/Monster/Monster_1_.asset | 133 ++++++++++++++++++ .../Excel/Monster/Monster_1_.asset.meta | 8 ++ .../Excel/Monster/Monster_2_.asset | 81 +++++++++++ .../Excel/Monster/Monster_2_.asset.meta | 8 ++ .../Excel/Monster/Monster_3_.asset | 94 +++++++++++++ .../Excel/Monster/Monster_3_.asset.meta | 8 ++ .../Excel/Monster/Monster_4_.asset | 133 ++++++++++++++++++ .../Excel/Monster/Monster_4_.asset.meta | 8 ++ .../Excel/Monster/Monster__.asset | 81 +++++++++++ .../Excel/Monster/Monster__.asset.meta | 8 ++ .../Excel/Monster/_MonsterUtil.asset | 23 +++ .../Excel/Monster/_MonsterUtil.asset.meta | 8 ++ .../Scripts/Generator/Excel/Monster.cs | 93 ++++++++++++ .../Scripts/Generator/Excel/Monster.cs.meta | 2 + .../Scripts/Generator/Excel/MonsterUtil.cs | 23 +++ .../Generator/Excel/MonsterUtil.cs.meta | 2 + 22 files changed, 770 insertions(+), 6 deletions(-) create mode 100644 Assets/_Project/ExcelResolver/Excel/monster.xlsx create mode 100644 Assets/_Project/ExcelResolver/Excel/monster.xlsx.meta create mode 100644 Assets/_Project/ScriptableObject/Excel/Monster.meta create mode 100644 Assets/_Project/ScriptableObject/Excel/Monster/Monster_1_.asset create mode 100644 Assets/_Project/ScriptableObject/Excel/Monster/Monster_1_.asset.meta create mode 100644 Assets/_Project/ScriptableObject/Excel/Monster/Monster_2_.asset create mode 100644 Assets/_Project/ScriptableObject/Excel/Monster/Monster_2_.asset.meta create mode 100644 Assets/_Project/ScriptableObject/Excel/Monster/Monster_3_.asset create mode 100644 Assets/_Project/ScriptableObject/Excel/Monster/Monster_3_.asset.meta create mode 100644 Assets/_Project/ScriptableObject/Excel/Monster/Monster_4_.asset create mode 100644 Assets/_Project/ScriptableObject/Excel/Monster/Monster_4_.asset.meta create mode 100644 Assets/_Project/ScriptableObject/Excel/Monster/Monster__.asset create mode 100644 Assets/_Project/ScriptableObject/Excel/Monster/Monster__.asset.meta create mode 100644 Assets/_Project/ScriptableObject/Excel/Monster/_MonsterUtil.asset create mode 100644 Assets/_Project/ScriptableObject/Excel/Monster/_MonsterUtil.asset.meta create mode 100644 Assets/_Project/Scripts/Generator/Excel/Monster.cs create mode 100644 Assets/_Project/Scripts/Generator/Excel/Monster.cs.meta create mode 100644 Assets/_Project/Scripts/Generator/Excel/MonsterUtil.cs create mode 100644 Assets/_Project/Scripts/Generator/Excel/MonsterUtil.cs.meta diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs index 0908e75..acda6ed 100644 --- a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs +++ b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs @@ -50,7 +50,7 @@ namespace Tools.ExcelResolver.Editor var classCodeData = new ClassCodeData(excelFile.Name[..^5]); classCodeData.fields = GetFieldData(worksheet, classCodeData); - classCodeData.tableType = CheckTableType(worksheet, classCodeData); + classCodeData.tableType = CheckTableTypeAndSetKeyField(worksheet, classCodeData); WriteDataCode(classCodeData); WriteSOCode(classCodeData); @@ -96,7 +96,7 @@ namespace Tools.ExcelResolver.Editor } } - private static TableType CheckTableType(ExcelWorksheet worksheet, ClassCodeData classCodeData) + private static TableType CheckTableTypeAndSetKeyField(ExcelWorksheet worksheet, ClassCodeData classCodeData) { var tableType = TableType.SingleKeyTable; @@ -108,8 +108,9 @@ namespace Tools.ExcelResolver.Editor var configs = config.Split("|"); Assert.IsTrue(configs.Length >= 2, $"'{classCodeData.className}'配置错误,SingleKeyTable只能有一个主键"); var key = configs[1]; - classCodeData.keyField = classCodeData.fields.Where(f => f.Value.varName == key).Select(p => p.Value).ToArray(); - Assert.IsTrue(classCodeData.keyField.Length == 1, $"'{classCodeData.className}'配置错误,主键字段不存在或重复"); + 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 duplicateValues = keyDict.GroupBy(x => x.Value).Where(g => g.Count() > 1); foreach (var duplicateValue in duplicateValues) @@ -121,6 +122,22 @@ namespace Tools.ExcelResolver.Editor else if (config.Contains("UnionMultiKeyTable")) { tableType = TableType.UnionMultiKeyTable; + var configs = config.Split("|"); + 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}'配置错误,主键字段不存在"); + return field.Value; + }).ToArray(); + // 判断主键是否有重复值或缺失 + var keyDictList = new List>(); + foreach (var keyField in classCodeData.keyField) + { + keyDictList.Add(ExcelResolverUtil.ReadColumn(worksheet, keyField.colIndex)); + } + } else if (config.Contains("MultiKeyTable")) { diff --git a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataSO.cs b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataSO.cs index dfc0657..54e593f 100644 --- a/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataSO.cs +++ b/Assets/Unity-Tools/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataSO.cs @@ -1,8 +1,10 @@ using System; using System.Collections.Generic; using System.Reflection; +using System.Text; using OfficeOpenXml; using Sirenix.OdinInspector; +using Tools.Editor; using UnityEditor; using UnityEngine; @@ -22,6 +24,7 @@ namespace Tools.ExcelResolver.Editor var dataName = $"{classCodeData.className}"; var path = $"{excelResolverConfig.SOPathRoot}/{classCodeData.className}/"; + DirectoryUtil.MakeSureDirectory(path); string[] assetGuids = AssetDatabase.FindAssets($"t:{dataName}", new[] { path }); Dictionary originAssets = new(); @@ -93,13 +96,29 @@ namespace Tools.ExcelResolver.Editor switch (classCodeData.tableType) { case TableType.SingleKeyTable: + { var keyColIndex = classCodeData.keyField[0].colIndex; var key = worksheet.Cells[row, keyColIndex].Text; if (!string.IsNullOrEmpty(key)) return $"{classCodeData.className}_{key}"; break; - // case TableType.UnionMultiKeyTable: - // return $"{classCodeData.className}_{classCodeData.keyField[0].varName}"; + } + case TableType.UnionMultiKeyTable: + { + var sb = new StringBuilder(); + sb.Append(classCodeData.className); + foreach (var keyField in classCodeData.keyField) + { + var keyColIndex = keyField.colIndex; + var key = worksheet.Cells[row, keyColIndex].Text; + sb.Append("_"); + sb.Append(key); + } + + if (sb.Length > classCodeData.className.Length) + return sb.ToString(); + break; + } // case TableType.MultiKeyTable: // return $"{classCodeData.className}_{classCodeData.keyField[0].varName}"; // case TableType.NotKetTable: diff --git a/Assets/_Project/ExcelResolver/Excel/hero.xlsx b/Assets/_Project/ExcelResolver/Excel/hero.xlsx index 475ac0e3c94b143eeec012b3c3985a8513865287..a684677e8f0dd99f4a10ea3e69fc038eefd8a92a 100644 GIT binary patch delta 11042 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 B{i^@~ delta 11180 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 H7w!KCGch +// 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 Monster : SerializedScriptableObject, IExcelSOData + { + + /// + /// 英雄 + /// + public int id; + + /// + /// 等级 + /// + public int level; + + /// + /// 名称 + /// + 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/Monster.cs.meta b/Assets/_Project/Scripts/Generator/Excel/Monster.cs.meta new file mode 100644 index 0000000..6baf8d9 --- /dev/null +++ b/Assets/_Project/Scripts/Generator/Excel/Monster.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 07476013186559f459c8b934922db079 \ No newline at end of file diff --git a/Assets/_Project/Scripts/Generator/Excel/MonsterUtil.cs b/Assets/_Project/Scripts/Generator/Excel/MonsterUtil.cs new file mode 100644 index 0000000..9f119da --- /dev/null +++ b/Assets/_Project/Scripts/Generator/Excel/MonsterUtil.cs @@ -0,0 +1,23 @@ +//------------------------------------------------------------------------------ +// +// 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 MonsterUtil : SerializedScriptableObject, IExcelSOUtil + { + } +} diff --git a/Assets/_Project/Scripts/Generator/Excel/MonsterUtil.cs.meta b/Assets/_Project/Scripts/Generator/Excel/MonsterUtil.cs.meta new file mode 100644 index 0000000..c3a8768 --- /dev/null +++ b/Assets/_Project/Scripts/Generator/Excel/MonsterUtil.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 597b3ca9edd08af4290f8bdc398d04a1 \ No newline at end of file