Atualmente, minha estrutura básica de IA tem agentes que se movem ao longo de um caminho irregular formado por uma série de pontos.
Eles fazem isso simplesmente movendo sua posição de um ponto para o outro. Quando atingem o próximo ponto, avançam para o próximo e assim por diante. Como posso mudar isso para que eles se movam suavemente ao longo de uma versão curva do caminho, e como faço para gerar a curva?
mathematics
algorithm
path-finding
SirYakalot
fonte
fonte
Respostas:
Você está buscando algum tipo de suavização de caminho. Obviamente, como bummzack apontou, você também deseja garantir que qualquer suavização de caminho que você realize resulte em movimentos legais para seus agentes.
Este artigo da Gamasutra explica praticamente tudo o que você precisa saber, incluindo suavização de caminho, curvas legais e algoritmos realistas de curva suave.
Outra alternativa, que é um pouco mais simples, é usar o comportamento Procurar com um pequeno círculo / esfera delimitadora para verificar se o agente está no ou próximo do próximo ponto no caminho.
fonte
Como você já conhece seus pontos de controle, basta atualizar seu código de interpolação para usar um algoritmo de curvatura (Hermite ou Cosine, por exemplo).
Esses sites oferecem uma ótima explicação e um exemplo de código que deve ajudar você a começar:
Métodos de interpolação de Paul Bourke
Sol :: Tutoriais - Truques de interpolação
fonte
Eu vou contra a corrente aqui e sugiro que, em vez de pré-gerar suas curvas, apenas manipule-a quadro a quadro, usando (por exemplo) a mesma lógica que você usaria para criar uma homing míssil .
Isso será muito mais fácil e provavelmente mais realista, porque você não precisa de casos especiais para quando existem paredes entre dois pontos - você apenas lida com a detecção de colisões como de costume.
A desvantagem é que o movimento ficará abaixo do ideal. O objeto sempre seguirá o caminho mais direto de um waypoint para o próximo, o que significa que, diferentemente de um spline, ele não começará a girar para o waypoint 3 até que ele já tenha passado pelo waypoint 2. Dependendo da sua situação, isso pode ou não pode ser corrigido ajustando seus pontos de referência (se houver algum problema).
fonte
O localizador de caminhos deve fornecer o caminho e você não deve modificá-lo. Acredito que seja possível modificar o algoritmo do localizador de caminhos para levar em conta que os caminhos com curvas acentuadas são irregulares do que aqueles com curvas suaves, como já ocorre com caminhos longos versus curtos.
Vou postar aqui alguma solução, se puder encontrar um momento para pensar profundamente, mas acho que esse é o caminho a seguir.
fonte