public Vector2 getSteering(LinePath path) { Vector2 targetPosition; // If the path has only one node then just go to that position; if (path.Length == 1) { targetPosition = path[0]; } // Else find the closest spot on the path to the character and go to that instead. else { /* Find the final destination of the character on this path */ Vector2 finalDestination = (pathDirection > 0) ? path[path.Length - 1] : path[0]; /* If we are close enough to the final destination then either stop moving or reverse if * the character is set to loop on paths */ if (Vector2.Distance(transform.position, finalDestination) < stopRadius) { if (pathLoop) { pathDirection *= -1; } else { rb.velocity = Vector2.zero; return(Vector2.zero); } } /* Get the param for the closest position point on the path given the character's position */ float param = path.getParam(transform.position); /* Move down the path */ param += pathDirection * pathOffset; /* Make sure we don't move past the beginning or end of the path */ if (param < 0) { param = 0; } else if (param > path.maxDist) { param = path.maxDist; } /* Set the target position */ targetPosition = path.getPosition(param); } return(steeringUtils.arrive(targetPosition)); }
void setArriveTarget() { if (currentPath.Length > 1) { arriveTarget = currentPath.getPosition(farthestPathParam); } else { arriveTarget = currentPath [0]; } arriveStartTime = Time.time; }
public Vector3 getSteering(LinePath path, bool pathLoop, out Vector3 targetPosition) { // 如果路径只有一个节点, 那么只需转到该位置 if (path.Length == 1) { targetPosition = path[0]; } //否则, 在该路径上找到最接近的点, 然后转到该位置。 else { if (!pathLoop) { /* 查找此路径上的 最终目标 */ Vector2 finalDestination = (pathDirection > 0) ? path[path.Length - 1] : path[0]; // 如果我们足够接近最终目的地, 就停止 /* If we are close enough to the final destination then either stop moving or reverse if * the character is set to loop on paths */ if (Vector2.Distance(transform.position, finalDestination) < stopRadius) { targetPosition = finalDestination; rb.velocity = Vector2.zero; return(Vector2.zero); } } /* 在给定路径上,得到最接近的位置点的参数*/ float param = path.getParam(transform.position); /* 向下移动的路径 */ param += pathDirection * pathOffset; /* 得到目标位置 */ targetPosition = path.getPosition(param, pathLoop); } return(steeringBasics.Arrive(targetPosition)); }
public Vector3 getSteering(LinePath path, bool pathLoop, out Vector3 targetPosition) { // If the path has only one node then just go to that position; if (path.Length == 1) { targetPosition = path[0]; } // Else find the closest spot on the path to the character and go to that instead. else { /* Get the param for the closest position point on the path given the character's position */ float param = path.getParam(transform.position, rb); //Debug.DrawLine(transform.position, path.getPosition(param, pathLoop), Color.red, 0, false); if (!pathLoop) { Vector3 finalDestination; /* If we are close enough to the final destination then stop moving */ if (isAtEndOfPath(path, param, out finalDestination)) { targetPosition = finalDestination; rb.velocity = Vector3.zero; return(Vector3.zero); } } /* Move down the path */ param += pathDirection * pathOffset; /* Set the target position */ targetPosition = path.getPosition(param, pathLoop); //Debug.DrawLine(transform.position, targetPosition, Color.red, 0, false); } return(steeringBasics.arrive(targetPosition)); }
public Vector3 getSteering(LinePath path, bool pathLoop, out Vector3 targetPosition) { // If the path has only one node then just go to that position; if (path.Length == 1) { targetPosition = path[0]; } // Else find the closest spot on the path to the character and go to that instead. else { if (!pathLoop) { /* Find the final destination of the character on this path */ Vector2 finalDestination = (pathDirection > 0) ? path[path.Length - 1] : path[0]; /* If we are close enough to the final destination then either stop moving or reverse if * the character is set to loop on paths */ if (Vector2.Distance(transform.position, finalDestination) < stopRadius) { targetPosition = finalDestination; rb.velocity = Vector2.zero; return(Vector2.zero); } } /* Get the param for the closest position point on the path given the character's position */ float param = path.getParam(transform.position); /* Move down the path */ param += pathDirection * pathOffset; /* Set the target position */ targetPosition = path.getPosition(param, pathLoop); } return(steeringBasics.arrive(targetPosition)); }
public Vector2 getSteering(LinePath path, bool pathLoop, out Vector2 targetPosition) { // If the path has only one node then just go to that position; if (path.Length == 1) { targetPosition = path[0]; } // Else find the closest spot on the path to the character and go to that instead. else { /* Find the final destination of the character on this path */ Vector2 finalDestination = (pathDirection > 0) ? path[path.Length-1] : path[0]; /* If we are close enough to the final destination then either stop moving or reverse if * the character is set to loop on paths */ if( Vector2.Distance(transform.position, finalDestination) < stopRadius ) { if(pathLoop) { pathDirection *= -1; } else { targetPosition = finalDestination; rb.velocity = Vector2.zero; return Vector2.zero; } } /* Get the param for the closest position point on the path given the character's position */ float param = path.getParam(transform.position); /* Move down the path */ param += pathDirection * pathOffset; /* Set the target position */ targetPosition = path.getPosition(param); } return steeringUtils.arrive(targetPosition); }