示例#1
0
        /// <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);
        }
示例#2
0
        /// <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);
        }
示例#3
0
        /// <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);
        }