Boa noite, amigos!
Estou em um projeto 3D e preciso de ajuda com a movimentação de animais. Fiz uma movimentação utilizando NavMesh e o animal desvia de obstáculos mas, na hora de parar, ele fica meio que deslizando no chão (talvez pq o terreno é irregular), perdendo o ponto de destino e fica visivelmente mal feito. Tentei várias formas de resolver, mas sem sucesso. Estou pensando em programar a movimentação manualmente utilizando transform mesmo e, quando o animal encontrar um obstáculo, vai desviar de alguma forma.
Quero saber qual a melhor forma de fazer esse tipo de movimentação, se é utilizando NavMesh ou outra biblioteca, ou programando manualmente?
Minha dúvida não foi esclarecida, então acabei optando por utilizar NavMesh mesmo.
Se alguém vier a ter a mesma duvida que eu, o Navmesh é uma excelente ferramenta. Faz uma boa AI para animais e inimigos não ficarem caindo em buracos e trombando em objetos como árvores e rochas.
Boa noite Edivaldo. Acabei ficando OFF essa última semana devido a uma gripe forte que peguei, por isso não consegui acompanhar muito bem o fórum. Mas agora estou melhor
Sobre a sua dúvida: para implementar essa mecânica, o NavMesh AI é realmente a melhor ferramenta. No entanto, dependendo de como foi feita a implementação, é comum que o inimigo continue “deslizando” ao alcançar o alvo se o movimento não for interrompido via programaçaõ.
Dá uma olhada no exemplo abaixo:
void Update()
{
float distanciaParaJogador = Vector3.Distance(jogador.position, transform.position);
if (distanciaParaJogador <= distanciaAtaque)
{
navMeshAgent.velocity = Vector3.zero; // Para o movimento do agente
if (Time.time > tempoProximoAtaque)
{
PrepararAtaque();
}
}
else
{
navMeshAgent.SetDestination(jogador.position);
}
animator.SetBool("Mover", navMeshAgent.velocity.magnitude > 0.1f);
}
O script acima fica verificando a distância do inimigo em relação ao jogador (alvo). Se estiver a uma distância próxima, ele para o movimento (navMeshAgent.velocity = Vector3.zero;), fazendo isso evitamos que o inimigo fique deslizando.
É uma solução, não sei se te atende. Se puder adicionar seu código aqui para eu dar uma analisada.