Como implemento formações de grupo em um RTS 3D?

14

Consegui obter o trabalho de busca de caminho para uma única unidade e evitei a colisão agente-agente, mas agora preciso enviar um grupo de agentes para algum local.

Esta é a minha configuração até agora:

  • Localização de waypoint
  • A distância mínima entre dois nós é um pouco maior que o maior raio da esfera delimitadora permitido para um agente.
  • Os agentes evitam colisões com outros agentes adotando algum comportamento de orientação I com base no caminho claro

Então agora eu preciso enviar meus agentes para algum lugar do grupo. Eu li alguns posts dizendo que uma maneira de fazer isso é criar um líder de grupo e dar as outras unidades compensadas para sua posição.

Mas então o problema é: e se a formação do grupo não puder ser alcançada? por exemplo, você deseja formar um retângulo, mas na posição de destino existe uma estrutura próxima que impede a criação de uma configuração de retângulo.

xcrypt
fonte
2
Estou no trabalho, então não tenho tempo para escrever uma resposta adequada, mas aqui estão os meus zero pontos, dois centavos: Use um algoritmo de flocagem de Boids e, em seguida, represente obstáculos como objetos dos quais os Boids são repelidos.
quer
@Nailer, o algoritmo de flocagem funcionaria enquanto eles estivessem se movendo, mas como eu detectaria se sua posição final está "ok" e notificaria que eles podem parar de se mover? Não se preocupe, eu posso esperar pela sua resposta;)
Xcrypt

Respostas:

13

Na verdade, há um artigo muito bom sobre isso no Gamasutra. E abrange tópicos como formações e resolução de colisões:

insira a descrição da imagem aqui

E outro artigo deles sobre o mesmo tópico, que é um pouco mais curto, mas tem mais exemplos de pseudo-código:

insira a descrição da imagem aqui

Finalmente, uma coisa bacana para se pensar ao implementar seu sistema é a idéia de um Supremo Comandante 2 de "Campo de Fluxo" usado isso ; E é baseado na pesquisa Crowd Flows da Washington State University .

MichaelHouse
fonte
Obrigado, eu vi as multidões de continuum encontrarem coisas do comandante supremo, mas acho que vou continuar com o que tenho no caixa. Vou tentar isso quando eu chegar um pouco mais exp, porque sim parece realmente bacana; D
Xcrypt
2

Eu acho que você pode ter uma "entidade de rebanho" invisível que é o chefe da formação, e fazer com que as outras criaturas se posicionem em relação a essa entidade. Se essa entidade puder girar, a posição relativa também girará.

... oopos .. você já está fazendo isso.

Que tal isso:

Por que você não pode calcular novas posições para as entidades que colidem? Não preciso ser extravagante, talvez apenas arraste uma linha do ponto original desejado e o líder e mova a posição desejada para o meio desta linha. Teste novamente a colisão.

Tei
fonte
Bem, foi o que eu disse na minha pergunta: D A parte complicada é como lidar com a colisão da formação com o terreno / obstáculos / estruturas
Xcrypt
Desculpe! Atualizei minha resposta com uma nova idéia.
Tei
Não entendi, você reduziria pela metade a magnitude do vetor offset e continuaria verificando se essa é uma posição livre de colisão? Isso provavelmente irá falhar em muitos casos
Xcrypt