using System; using AI; using Data; namespace Utils { public static class BehaviorTreeUtils { /// /// 将行为树定义转换为 AIBase 类型。 /// /// 行为树定义。 /// 转换后的 AIBase 实例。 public static BehaviorTreeBase ConvertToAIBase(BehaviorTreeDef behaviorTreeDef) { if (behaviorTreeDef == null) return null; var aiBase = CreateAIBaseInstance(behaviorTreeDef.className); return aiBase; } /// /// 使用反射根据类名创建 AIBase 的具体子类实例。 /// /// 类名。 /// 创建的 AIBase 子类实例。 private static BehaviorTreeBase CreateAIBaseInstance(string className) { if (string.IsNullOrEmpty(className)) throw new ArgumentException("className 不能为空"); if (className.Equals("AIBase", StringComparison.OrdinalIgnoreCase)) return (BehaviorTreeBase)Activator.CreateInstance(typeof(BehaviorTreeBase)); // 定义可能的命名空间列表 var possibleNamespaces = new[] { "AI" }; foreach (var ns in possibleNamespaces) try { // 获取当前程序集 var assembly = typeof(BehaviorTreeBase).Assembly; // 尝试查找类型 var type = assembly.GetType($"{ns}.{className}"); if (type != null && typeof(BehaviorTreeBase).IsAssignableFrom(type)) // 如果找到合适的类型,则创建实例并返回 return (BehaviorTreeBase)Activator.CreateInstance(type); } catch { // 忽略单个命名空间的错误,继续尝试下一个命名空间 } // 如果所有命名空间都未找到对应的类型,抛出异常 throw new InvalidOperationException($"无法找到类型 {className} 或该类型不是 AIBase 的子类"); } } }