Я пытаюсь создать волейбольную сцену в единстве.Что я хочу, так это создать сцену, в которой два NPC бросают мяч друг в друга.И я хочу, чтобы мяч приземлился в случайных точках, а NPC достигли точки одновременно с тем, как мяч достигнет точки.Теперь я использую уравнения параболы, чтобы вычислить, где мяч должен приземлиться и сколько времени потребуется, чтобы туда добраться.Время и место посадки работают нормально.Но я не могу получить NPC там в точное время.Я использую следующую сопрограмму для перемещения NPC и мяча.Мяч достигает точки вовремя, но NPC каким-то образом опаздывает.
IEnumerator playOneRound()
{
//this is the point where the ball is going to land
currentMovePoint.transform.position = currentRandomObjects[Random.Range(0, currentRandomObjects.Length)].transform.position;
parabolaStartPoint.transform.position = currentStartPoint.transform.position;
parabolaEndPoint.transform.position = currentBallPoint.transform.position;
ballController.FollowParabola();
//this is the time in which the ball will reach the end point of the parabola
time = ballController.GetDuration();
//this is the distance between the NPC and the point where the ball will land
distance = Vector3.Distance(currentPlayer.transform.position, currentMovePoint.transform.position);
speed = distance / time;
// clockspeed here is the amount of seconds I am going to wait for each iteration.
// so basically I am converting the the speed from distance-unit/second to
// distance-unit/clockspeed
distancePerClock = speed * clockSpeed;
while (Vector3.Distance(currentPlayer.transform.position, currentMovePoint.transform.position) > 0.1f)
{
currentPlayer.transform.position = Vector3.MoveTowards(currentPlayer.transform.position, currentMovePoint.transform.position, distancePerClock);
yield return new WaitForSeconds(clockSpeed);
}
}
Математика, кажется, прямо на бумаге.Но почему-то здесь не работает.Я что-то пропустил?