Estou criando um jogo de hack e slash e quero que meus personagens se movam como, por exemplo, no Torchlight, Diablo etc. etc. Atualmente, eu gero um conjunto de nós para todas as áreas que podem ser passadas de um andar. Quando clico em algum lugar, o jogador passa por um caminho interpolado de nós. Isso não parece muito natural. O jogador se move como um robô. Os inimigos também usam esse sistema de nós para movimento e compartilham o mesmo problema, mas eu tenho mais um problema com eles. Quando os inimigos detectam o jogador, eles o procuram pelo caminho mais curto. Às vezes, eles usam o mesmo caminho e se alinham ao jogador, em vez de cercá-lo. Não sei como fazer os inimigos escolherem caminhos diferentes e cercarem o jogador. Você sabe como posso resolver esses problemas? Talvez eu deva usar uma abordagem diferente para o movimento do personagem?
Minha técnica atual:
Captura de tela do Torchlight:
---ATUALIZAR---
Eu quero saber como lidar com estas situações:
Situação 1, tenho obstáculos dinâmicos / estáticos a caminho
Situação 2, os inimigos têm o mesmo caminho para o jogador (entre na fila para lutar conosco)
Respostas:
Comportamentos de direção em combinação com uma estrutura de dados de navegação .
Existem várias maneiras de fazer isso, mas esse é o conceito básico. Pode ser mais fácil usar uma malha de navegação para que você possa aplicar a busca de caminhos em cada seção convexa.
Se você é inflexível quanto à manutenção de um gráfico, pode usar o comportamento Procurar para cada nó no caminho, em vez de seguir rigidamente um caminho de nó para nó.
Outro método que você poderia empregar é o Path Smoothing, mas lembre-se de que isso é bastante computacionalmente caro.
Espero que ajude.
EDITAR:
Para ajudar com seus problemas de prevenção de obstáculos, use algum tipo de prevenção de obstáculos .
fonte
Se você preferir ficar com um nodegraph, em vez de mudar para uma malha de navegação, como outros sugeriram, poderá resolver o problema de "alinhar com o jogador em vez de cercá-lo", designando cada inimigo para atacar a partir de uma direção específica.
Existem muitas maneiras de conseguir isso, mas eu geralmente uso um sistema de 'token' para atribuir direções únicas aos monstros, onde o objeto do jogador possui um token para cada direção (norte, nordeste, leste, etc.). Quando um inimigo quer traçar o caminho para o jogador, ele deve primeiro adquirir uma ficha dele. A direção especificada pelo token diz ao monstro para qual lado do jogador ele pode encontrar o caminho. Como o jogador possui apenas um token para cada direção, e os monstros precisam de um token antes de poderem atacar, vários monstros nem todos tentarão encontrar o mesmo lado do jogador, o que deve interromper um pouco o caminho.
Além disso, você também pode aplicar uma pequena penalidade aos nós durante o processo de encontrar caminhos, para incentivar os monstros a se aproximarem de uma direção que corresponda ao token que eles possuem. (Ou seja, se um monstro tiver o token que permite atacar a partir do leste, com o objetivo de determinar o "caminho mais curto" para esse monstro, trate os nós do caminho ao norte / oeste / sul do jogador como se eles são vários nós, em vez de apenas um). Isso fará com que os monstros se separem mais rapidamente e tente flanquear o jogador, em vez de marchar até o jogador em fila única e se espalhar apenas na última etapa.
fonte
Basicamente, para os inimigos, o que você quer fazer é encontrar o caminho no nível macro (pense em gerar áreas convexas e percorrer a área em que o jogador se encontra) e adote alguns comportamentos de direção no estilo micro no nível micro (quando estiver perto para o jogador).
Aqui está um exemplo de comportamento boid: http://www.red3d.com/cwr/boids/
Para o jogador, acho que a luz das tochas faz uma busca em uma malha de navegação para onde você clica / arrasta, e isso funciona muito bem. Pode parecer um pouco mais desconectado do que o controle direto, mas leva a melhores resultados para o jogador.
fonte
existe um algoritmo chamado rrt que é usado para o problema de busca de caminhos no mundo real. a superfície em que seu herói (ou inimigos) pode caminhar é uma entrada, juntamente com a superfície em que os objetos podem se mover e, usando algum algoritmo de otimização, ele encontra um caminho para o seu destino. Por mais que eu saiba, esse algoritmo é muito usado nas ligas robocup. é rápido, encontra o caminho mais curto e evita colisões e curvas fechadas. você pode usar este powerpoint show para ter uma idéia de como ele gera o caminho.
fonte
Para tornar as rotas de localização de caminhos mais "realistas", sugiro que você verifique o artigo sobre A * de aparência natural em Game Programming Gems Vol.1
fonte