/// <summary> /// 检查程序前提条件 /// </summary> /// <param name="agent"></param> /// <param name="bb"></param> /// <returns></returns> public override bool CheckProceduralPrecondition(GameObject agent, BlackBoard bb) { // find the nearest tree that we can chop //找到我们能砍掉的最近的树 AppleTreeComponet[] trees = (AppleTreeComponet[])bb.GetData("appleTree"); AppleTreeComponet closest = null; float closestDist = 0; foreach (AppleTreeComponet tree in trees) { if (closest == null) { // first one, so choose it for now //第一个,现在就选择它 closest = tree; closestDist = (tree.gameObject.transform.position - agent.transform.position).magnitude; } else { // is this one closer than the last? //这个比最后一个更近吗? float dist = (tree.gameObject.transform.position - agent.transform.position).magnitude; if (dist < closestDist) { // we found a closer one, use it //我们找到了一个更近的,用它 closest = tree; closestDist = dist; } } } if (closest == null) { return(false); } targetAppleTree = closest; target = targetAppleTree.gameObject; return(closest != null && closest.AppleNum > 0); }
public override void reset() { eated = false; targetAppleTree = null; startTime = 0; }