public override void OnAwake() { if (Node.Fields == null || Node.Fields["Priority"] == null) { Node.Status = NodeStatus.ERROR; return; } CompositeNode = Node as BaseCompositeNode; for (int index = 0; index < CompositeNode.Children.Count; index++) { Children.Add(CompositeNode.Children[index]); } RandList.Clear(); PriorityList = new List <int>(); RepeatIntField repeatIntField = Node.Fields["Priority"] as RepeatIntField; List <int> tempList = repeatIntField.Value; for (int index = 0; index < tempList.Count; index++) { PriorityList.Add(tempList[index]); } }
public override void OnAwake() { CompositeNode = Node as BaseCompositeNode; for (int index = 0; index < CompositeNode.Children.Count; index++) { Children.Add(CompositeNode.Children[index]); } }
public override void OnUpdate(float deltaTime) { int failCount = 0; int successCound = 0; BaseCompositeNode compositeNode = Node as BaseCompositeNode; for (int i = 0; i < compositeNode.Children.Count; i++) { BaseNode node = compositeNode.Children[i]; node.OnUpdate(deltaTime); if (node.Status == NodeStatus.FAILED) { failCount++; if (FailPolicy == (int)FAILURE_POLICY.FAIL_ON_ONE) { Node.Status = NodeStatus.FAILED; break; } else if (FailPolicy == (int)FAILURE_POLICY.FAIL_ON_ALL && failCount == compositeNode.Children.Count) { Node.Status = NodeStatus.FAILED; break; } } else if (node.Status == NodeStatus.SUCCESS) { successCound++; if (SucceedPolicy == (int)SUCCESS_POLICY.SUCCEED_ON_ONE) { Node.Status = NodeStatus.SUCCESS; break; } else if (SucceedPolicy == (int)SUCCESS_POLICY.SUCCEED_ON_ALL && successCound == compositeNode.Children.Count) { Node.Status = NodeStatus.SUCCESS; break; } } else if (node.Status == NodeStatus.ERROR) { Node.Status = NodeStatus.ERROR; break; } } if ((failCount + successCound) == compositeNode.Children.Count) { Node.Status = NodeStatus.SUCCESS; } }
/// <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); }
public override void OnDestroy() { CompositeNode = null; base.OnDestroy(); }
public override void OnAwake() { CompositeNode = Node as BaseCompositeNode; }