Atualmente, estou desenvolvendo um jogo do tipo Diablo para plataforma móvel (iphone5 +).
Uma simples pesquisa A * encontrará o caminho, mas a prevenção de colisões ainda precisa ser levada em consideração.
Haverá cerca de 50 monstros ativos ao mesmo tempo, então o desempenho é muito importante.
Encontrei alguns métodos que podem funcionar.
NavMesh + RVO
A biblioteca de reformulação / desvio funciona bem por
pathfinding
parte, mas sua simulação de multidão rapidamente atinge o limite (mais de 5 ms para 30 agentes).Outra biblioteca RVO2 parece bem (menos de 2ms para 50 agentes), mas a biblioteca tem alguns problemas de licença.
Campos de fluxo + mecanismo de física
Muitos jogos RTS usam esse método, mas parece que é necessário um mecanismo de física para resolver colisões. Se muitos agentes não compartilham um objetivo comum, esse método pode custar mais do que a busca de caminhos A * tradicional.
Comportamentos de direção + Mecanismo de física
Comportamentos de direção incluem muitos conceitos, acho que
simple avoidance behavior
podem funcionar (apenas vire à esquerda / direita se houver algo na frente), mas o método ainda requer um mecanismo de física para trabalhar em conjunto.
Ainda não tenho certeza de qual usar, talvez exista outros métodos de busca de caminhos e prevenção de colisões.
O PS Halo:Spartan Strike
usa o Havok AI (baseado no RVO?), Mas eu não vi muitos inimigos naquele jogo, então me pergunto se o primeiro método (NavMesh + RVO) funcionará bem na plataforma móvel.
Respostas:
Essa é uma pergunta bem interessante, e vou tentar contribuir com o que puder.
Primeiro, acho que você precisa definir claramente os limites do jogo que está tentando criar e definir essas perguntas (algumas já podem ter sido respondidas).
Para citar uma resposta daqui em diante como o pathfinding é feito no starcraft 2:
Então, voltando às suas 3 proposições:
Algumas notas sobre os comportamentos de direção, você pode definir as forças de direção necessárias, com as áreas que deseja. Você precisa de pelo menos três para reunir-se / atrair / repulsar, mas provavelmente há mais interessantes.
Em seguida, tente encontrar uma biblioteca que faça o direcionamento dos comportamentos para ver se ela se adapta às suas necessidades (como essa ? Eu realmente não conheço nenhuma, mas ela existe).
Se a biblioteca não atender às suas necessidades, você poderá se divertir! Mas existem recursos e algoritmos suficientes para implementar você mesmo os comportamentos de flocagem. Exemplo 1 Exemplo 2
Se você optar por se implementar, saiba que há uma ótima otimização a ser feita, pois o escopo do seu agente é reduzido, por exemplo, pela sua localização no rebanho. De qualquer forma, deve ser incluído em alguns dos algoritmos.
Bem, isso é o melhor de meu conhecimento, não tenho certeza de qualquer maneira
fonte
Se os caminhos inimigos não forem muito dinâmicos (Dinâmico seria: todos os agentes estão atacando alvos diferentes e os caminhos para esses alvos devem ser atualizados a cada par de quadros)
Então eu faria uma combinação de campos de fluxo e comportamentos de direção se o desempenho for sua principal preocupação. Existem alguns assuntos mais complicados envolvidos, como particionar o espaço de seus agentes, para encontrar vizinhos é mais fácil, mas é sua melhor aposta para o desempenho. (removendo sua pesquisa A * e usando campos de fluxo para direcionar seus agentes)
Esses dois algoritmos combinados são geralmente considerados a solução mais otimizada para cenas densas de agentes com pouco caminho dinâmico.
Eu evitaria a física, não importa sua opção final, pois ela pode ficar pesada.
A colisão entre agentes pode quase inteiramente ser tratada pelos comportamentos de direção e os campos de fluxo reduzem o peso de 50 agentes calculando caminhos. No entanto, lembre-se de que os campos de fluxo ficam cada vez mais caros quanto maior o tamanho do mapa, menor o tamanho da grade e mais dinâmica a seleção de alvos.
fonte