public void SetTarget(FightElement belongTo, FightElement target) { hitTarget = target; this.belongTo = belongTo; path.Insert(0, belongTo.transform.position); path.Insert(1, belongTo.transform.position + belongTo.transform.forward * 100); path.Insert(2, target.transform.position); }
int O = 0; //复杂度累计(超过3个点之后不计算.计算个蛋球). void CalculatePath(MovePath path, Vector3 start, Vector3 end) { if (O > 3) { return; } O++; collider.enabled = false; if (Physics.SphereCast(new Ray(start, end - start), radius, out hit, GetDistace(start, end))) { if (hit.collider.bounds.Contains(end)) { collider.enabled = true; return; } path.Insert(path.pathNode.Length - 1, GetPoit(path, hit, end - start)); //插入倒数第二个位置一个计算好的点 CalculatePath(path, path.pathNode[path.pathNode.Length - 2], path.pathNode[path.pathNode.Length - 1]); //计算下一个点,直到没有障碍物 } else { for (int i = 0; i < path.pathNode.Length - 1; i++) { if (!Physics.Raycast(path.pathNode[i], path.pathNode[path.pathNode.Length - 1] - path.pathNode[i], GetDistace(path.pathNode[i], path.pathNode[path.pathNode.Length - 1]))) { path.RemoveToEnd(i + 1); break; } } } collider.enabled = true; }