/// <summary> /// 获取已经注册的代理器Type /// </summary> /// <param name="nodeType">代理名字</param> /// <returns></returns> public NodeProxyInfo GetRegistedNodeType(string nodeType) { NodeProxyInfo nodeProxyInfo = null; RegistedLuaNodeProxyTypeDic.TryGetValue(nodeType, out nodeProxyInfo); if (nodeProxyInfo != null) { return(nodeProxyInfo); } RegistedCsNodeProxyTypeDic.TryGetValue(nodeType, out nodeProxyInfo); return(nodeProxyInfo); }
/// <summary> /// 注册Lua节点代理 /// </summary> /// <param name="classType">代理名字,唯一</param> /// <param name="nodeType">代理类型</param> /// <param name="isLua">是否Lua代理</param> public void RegisterLuaNodeProxy(string classType, BehaviorNodeType nodeType, bool isLua, bool needUpdate) { if (RegistedLuaNodeProxyTypeDic.ContainsKey(classType)) { Debug.LogError($"错误:Lua重复注册行为树节点 ClassType:{classType} BehaviorNodeType:{nodeType}"); return; } NodeProxyInfo nodeProxyInfo = new NodeProxyInfo { ClassType = classType, behaviorNodeType = nodeType, IsLua = isLua, NeedUpdate = needUpdate }; RegistedLuaNodeProxyTypeDic.Add(classType, nodeProxyInfo); }
/// <summary> /// 通过类型获取节点 /// </summary> /// <param name="classType"></param> /// <returns></returns> public static BaseNode GetBaseNode(string classType) { BaseNode baseNode = null; NodeProxyInfo nodeProxyInfo = BehaviorTreeManager.Instance.GetRegistedNodeType(classType); if (nodeProxyInfo == null) { Debug.LogError($"错误!!行为树节点未注册 ClassType:{classType}"); return(null); } switch (nodeProxyInfo.behaviorNodeType) { case BehaviorNodeType.Action: baseNode = new BaseActionNode(); break; case BehaviorNodeType.Condition: baseNode = new BaseConditionNode(); break; case BehaviorNodeType.Composite: baseNode = new BaseCompositeNode(); break; case BehaviorNodeType.Decorator: baseNode = new BaseDecoratorNode(); break; default: Debug.LogError($"错误!!行为树节点类型错误 ClassType:{classType}"); break; } baseNode.NodeInfo = nodeProxyInfo; return(baseNode); }