Как предсказать, где ИИ-игрок должен перехватить футбольный мяч после удара ногой?

Aug 18 2020

Этот вопрос задавался много раз раньше, но большинство ответов дает решение проблемы, когда предполагается, что мяч (цель) движется с постоянной скоростью.

По своему сценарию я делаю футбольный матч. Когда я пинаю мяч в определенном направлении, прикладывая некоторую силу к твердому телу мяча, я хочу, чтобы второй ИИ-игрок нашел точку на пути мяча, где он может перехватить мяч. Теперь этот мяч может замедляться за кадр, он не может двигаться с постоянной скоростью.

Я прикрепил изображение для визуализации.

Я знаю положение мяча, текущую скорость мяча, положение ИИ-игрока, постоянную скорость ИИ-игрока. Как мне найти такую ​​точку, где ИИ-игрок может перехватить мяч?

Я могу вычислить такую ​​точку с учетом текущей скорости мяча, но эта точка неточна и изменяется по мере изменения текущей скорости мяча за кадр, поскольку мяч может замедляться после каждого кадра. Это заставляет ИИ-игрока действовать как самонаводящаяся ракета. Вместо этого я хочу, чтобы ИИ-игрок предсказывал точку и просто бежал к ней.

Вот код C # (Unity), который у меня есть до сих пор:

public Vector3 CalculateIntercept()    
{       
     Vector3 pos = Ball.GetInstance().transform.position;
     Vector3 dir = Ball.GetInstance().GetVelocity();
     dir.y = transform.position.y;

     float dist = (pos - transform.position).magnitude;
     return pos + (dist / 6.17f) * dir; //6.17 is the AI player's constant speed.
}

У мяча нет сопротивления, но есть физический материал с трением. Я полагаю, чтобы решить эту проблему, мне, возможно, придется учитывать ускорение.

Пожалуйста, помогите мне разобраться в этом. Благодаря!

Ответы

Natalo77 Aug 18 2020 at 16:58

Ваш единственный вариант - запустить симуляцию всухую во время удара по мячу, а затем заставить ИИ начать движение в это место.