diff --git a/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorConfig.cs b/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorConfig.cs index 939f5f7..797595e 100644 --- a/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorConfig.cs +++ b/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorConfig.cs @@ -5,15 +5,17 @@ using UnityEngine; namespace Tools.ExcelResolver.Editor { [InlineEditor(InlineEditorObjectFieldModes.CompletelyHidden)] - [CreateAssetMenu(fileName = "ExcelResolverEditorConfig", menuName = "ExcelResolver/ExcelResolverEditorConfig")] + // [CreateAssetMenu(fileName = "ExcelResolverEditorConfig", menuName = "ExcelResolver/ExcelResolverEditorConfig")] public sealed class ExcelResolverEditorConfig : ScriptableObject { [LabelText("Excel路径"), FolderPath] public string ExcelPathRoot = "Assets/ExcelResolver/Excel"; [LabelText("Json路径"), ValueDropdown("@Tools.Editor.DirectoryUtil.GetFilePaths()")] public string JsonPathRoot = "Assets/ExcelResolver/Json"; - [LabelText("代码路径"), ValueDropdown("@Tools.Editor.DirectoryUtil.GetFilePaths()")] + [LabelText("C#代码路径"), ValueDropdown("@Tools.Editor.DirectoryUtil.GetFilePaths()")] public string CodePathRoot = "Assets/Scripts/Generator/Excel"; + [LabelText("SO存放路径"), ValueDropdown("@Tools.Editor.DirectoryUtil.GetFilePaths()")] + public string SOPathRoot = "Assets/ScriptableObject/Excel"; [LabelText("生成代码命名空间")] public string GenerateDataClassNameSpace = "Tools.ExcelResolver"; @@ -23,6 +25,7 @@ namespace Tools.ExcelResolver.Editor { DirectoryUtil.MakeSureDirectory(ExcelPathRoot); DirectoryUtil.MakeSureDirectory(JsonPathRoot); + DirectoryUtil.MakeSureDirectory(SOPathRoot); DirectoryUtil.MakeSureDirectory(CodePathRoot); } } diff --git a/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs b/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs index 8c3ffcf..2d7e705 100644 --- a/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs +++ b/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using OfficeOpenXml; +using UnityEditor; using UnityEngine; using UnityEngine.Assertions; @@ -33,8 +34,11 @@ namespace Tools.ExcelResolver.Editor fields = GetFieldData(worksheet), keyIndex = keyIndex }; + WriteDataCode(classCodeData); WriteSOCode(classCodeData); } + + AssetDatabase.Refresh(); } private TableType CheckTableType(ExcelWorksheet worksheet, out int[] keyIndex) diff --git a/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataCode.cs b/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataCode.cs index f1cbbd5..1327ed1 100644 --- a/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataCode.cs +++ b/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteDataCode.cs @@ -1,5 +1,7 @@ -using System; -using System.CodeDom; +using System.CodeDom; +using System.CodeDom.Compiler; +using System.IO; +using Microsoft.CSharp; /* 使用CodeCompileUnit需要将Edit->Project Settings->Player->Other Settings->Api Compatibility Level改为.NET 4.x(或.NET Framework) */ @@ -10,7 +12,7 @@ namespace Tools.ExcelResolver.Editor { private void WriteDataCode(ClassCodeData classCodeData) { - string path = $"{excelResolverConfig.CodePathRoot}/{classCodeData.className}.cs"; + string outputPath = $"{excelResolverConfig.CodePathRoot}/{classCodeData.className}.cs"; CodeCompileUnit compileUnit = new CodeCompileUnit(); CodeNamespace codeNamespace = new CodeNamespace(excelResolverConfig.GenerateDataClassNameSpace); compileUnit.Namespaces.Add(codeNamespace); @@ -34,29 +36,23 @@ namespace Tools.ExcelResolver.Editor CustomAttributes = new CodeAttributeDeclarationCollection() { new CodeAttributeDeclaration("Serializable") - } + }, + BaseTypes = { new CodeTypeReference("IExcelData") } + }; + codeNamespace.Types.Add(classType); + + CodeGeneratorOptions options = new CodeGeneratorOptions + { + BracingStyle = "C", + BlankLinesBetweenMembers = false, + VerbatimOrder = true, }; - // switch (classCodeData.tableType) - // { - // case TableType.SingleKeyTable: - // classType.BaseTypes.Add(new CodeTypeReference("Dictionary")); - // break; - // case TableType.UnionMultiKeyTable: - // classType.BaseTypes.Add(new CodeTypeReference("Dictionary")); - // break; - // case TableType.MultiKeyTable: - // classType.BaseTypes.Add(new CodeTypeReference("Dictionary")); - // break; - // case TableType.NotKetTable: - // classType.BaseTypes.Add(new CodeTypeReference("List<" + classCodeData.className + ">")); - // break; - // case TableType.ColumnTable: - // classType.BaseTypes.Add(new CodeTypeReference("Dictionary")); - // break; - // default: - // throw new ArgumentOutOfRangeException(); - // } + using (StreamWriter writer = new StreamWriter(outputPath)) + { + CSharpCodeProvider provider = new CSharpCodeProvider(); + provider.GenerateCodeFromCompileUnit(compileUnit, writer, options); + } } } } \ No newline at end of file diff --git a/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteSOCode.cs b/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteSOCode.cs index 03c5e9e..2186f4b 100644 --- a/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteSOCode.cs +++ b/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.WriteSOCode.cs @@ -9,7 +9,7 @@ namespace Tools.ExcelResolver.Editor { private void WriteSOCode(ClassCodeData classCodeData) { - string outputPath = $"{excelResolverConfig.CodePathRoot}/{classCodeData.className}.cs"; + string outputPath = $"{excelResolverConfig.CodePathRoot}/{classCodeData.className}SO.cs"; CodeCompileUnit compileUnit = new CodeCompileUnit(); CodeNamespace codeNamespace = new CodeNamespace(excelResolverConfig.GenerateDataClassNameSpace); compileUnit.Namespaces.Add(codeNamespace); @@ -26,13 +26,14 @@ namespace Tools.ExcelResolver.Editor codeNamespace.Imports.Add(new CodeNamespaceImport(import)); } - CodeTypeDeclaration classType = new CodeTypeDeclaration(classCodeData.className) + CodeTypeDeclaration classType = new CodeTypeDeclaration($"{classCodeData.className}SO") { IsClass = true, TypeAttributes = System.Reflection.TypeAttributes.Public, BaseTypes = { - new CodeTypeReference("ScriptableObject") + new CodeTypeReference("ScriptableObject"), + new CodeTypeReference("IExcelSO"), } }; codeNamespace.Types.Add(classType); diff --git a/Assets/Unity-Tools/Core/ExcelResolver/Interface/IExcelData.cs b/Assets/Unity-Tools/Core/ExcelResolver/Interface/IExcelData.cs new file mode 100644 index 0000000..710d3e6 --- /dev/null +++ b/Assets/Unity-Tools/Core/ExcelResolver/Interface/IExcelData.cs @@ -0,0 +1,7 @@ +namespace Tools.ExcelResolver +{ + public interface IExcelData + { + + } +} \ No newline at end of file diff --git a/Assets/Unity-Tools/Core/ExcelResolver/Interface/IExcelData.cs.meta b/Assets/Unity-Tools/Core/ExcelResolver/Interface/IExcelData.cs.meta new file mode 100644 index 0000000..10867fc --- /dev/null +++ b/Assets/Unity-Tools/Core/ExcelResolver/Interface/IExcelData.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9fcac6f462ea4970bcec93a8c1251964 +timeCreated: 1736060782 \ No newline at end of file diff --git a/Assets/Unity-Tools/Core/ExcelResolver/Interface/IExcelSO.cs b/Assets/Unity-Tools/Core/ExcelResolver/Interface/IExcelSO.cs new file mode 100644 index 0000000..06a154d --- /dev/null +++ b/Assets/Unity-Tools/Core/ExcelResolver/Interface/IExcelSO.cs @@ -0,0 +1,7 @@ +namespace Tools.ExcelResolver +{ + public interface IExcelSO + { + + } +} \ No newline at end of file diff --git a/Assets/Unity-Tools/Core/ExcelResolver/Interface/IExcelSO.cs.meta b/Assets/Unity-Tools/Core/ExcelResolver/Interface/IExcelSO.cs.meta new file mode 100644 index 0000000..ff0dc02 --- /dev/null +++ b/Assets/Unity-Tools/Core/ExcelResolver/Interface/IExcelSO.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: db16fbd5cf4648fcbef0b9f7ece040b1 +timeCreated: 1736060065 \ No newline at end of file