From b7a12ce85b30f3a86d28e6b3769869e642a6c297 Mon Sep 17 00:00:00 2001 From: m0_75251201 Date: Sun, 13 Jul 2025 23:26:57 +0800 Subject: [PATCH] =?UTF-8?q?(client)=20chore:=E8=AE=A9=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E8=AF=BB=E5=8F=96=E5=8C=BF=E5=90=8D=E5=AD=90?= =?UTF-8?q?=E5=AE=9A=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Client/Assets/Scripts/Data/DefinePack.cs | 31 ++++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/Client/Assets/Scripts/Data/DefinePack.cs b/Client/Assets/Scripts/Data/DefinePack.cs index a626b75..b5c0b22 100644 --- a/Client/Assets/Scripts/Data/DefinePack.cs +++ b/Client/Assets/Scripts/Data/DefinePack.cs @@ -6,6 +6,7 @@ using System.Text; using System.Xml.Linq; using Configs; using UnityEngine; +using Object = System.Object; namespace Data { @@ -141,7 +142,7 @@ namespace Data if (string.IsNullOrEmpty(className)) continue; // Debug.Log("1"); - var def = LoadDefineClass(element); + var def = LoadDefineClass(element,element.Name.ToString()); if (def == null) continue; // Debug.Log("2"); @@ -152,9 +153,8 @@ namespace Data } } - private Define LoadDefineClass(XElement defineDoc) + private Define LoadDefineClass(XElement defineDoc,string className) { - var className = defineDoc.Name.ToString(); var assembly = Assembly.GetExecutingAssembly(); Type type; @@ -217,8 +217,11 @@ namespace Data if (element != null) try { - // 将子元素的值转换为目标类型并赋值 - var value = Convert.ChangeType(element.Value, field.FieldType); + Object value; + if (IsFieldTypeInheritedFrom(field, typeof(Define))) + value = LoadDefineClass(element, field.FieldType.Name); + else + value = Convert.ChangeType(element.Value, field.FieldType); field.SetValue(define, value); } catch (Exception ex) @@ -278,5 +281,23 @@ namespace Data return sb.ToString(); } + + /// + /// 检查字段的类型是否继承自指定的类 + /// + /// 字段信息 + /// 要检查的基类类型 + /// 如果字段的类型是基类或其派生类,则返回 true + public static bool IsFieldTypeInheritedFrom(FieldInfo field, Type baseType) + { + // 获取字段的类型 + var fieldType = field.FieldType; + // 如果字段的类型为 null 或不是基类的派生类,则返回 false + if (!baseType.IsAssignableFrom(fieldType)) + return false; + + // 如果字段的类型直接是基类或其派生类,则返回 true + return fieldType != baseType && baseType.IsAssignableFrom(fieldType); + } } } \ No newline at end of file