Como prever onde a bola de futebol deve ser interceptada por um jogador de IA após ser chutada?

Aug 18 2020

Esta pergunta já foi feita muitas vezes antes, mas a maioria das respostas dá solução ao problema em que a bola (alvo) está se movendo a uma velocidade constante.

No meu cenário, estou fazendo um jogo de futebol. Quando chuto a bola em uma direção aplicando alguma força ao corpo rígido da bola, quero que um segundo jogador de IA encontre o ponto no caminho da bola onde ele possa interceptá-la. Agora, essa bola pode ficar desacelerando a cada quadro, ela não continua se movendo com uma velocidade constante.

Anexei uma imagem para visualização.

Eu sei a posição da bola, a velocidade atual da bola, a posição do jogador de IA, a velocidade constante do jogador de IA. Como faço para encontrar tal ponto, onde o jogador de IA pode interceptar a bola?

Sou capaz de calcular tal ponto com a velocidade atual da bola, mas esse ponto não é preciso e muda conforme a velocidade atual da bola muda por quadro, já que a bola pode ficar desacelerando a cada quadro. Isso faz o jogador de IA agir como um míssil teleguiado. Em vez disso, quero que o jogador de IA preveja um ponto e apenas corra para ele.

Aqui está o código C # (unidade) que tenho até agora:

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.
}

Não há nenhum empecilho na bola, mas há um material de física com fricção. Suponho que para resolver isso, talvez precise levar em conta a aceleração.

Por favor me ajude a descobrir isso. Obrigado!

Respostas

Natalo77 Aug 18 2020 at 16:58

Sua única opção é fazer um dry run da simulação quando a bola é chutada e, em seguida, fazer com que o Ai comece a se mover para esse local.