Estou tentando encontrar uma solução para esse problema. Estou tentando criar uma malha de navegação no formato de uma grade de vértices bloqueados para x, y coordenadas com piso em forma de quadrados para o espaço 3D. Mas estou tendo problemas para tentar descobrir uma maneira de fazer isso.
Tentei procurar na biblioteca de reformulação. É um método bastante robusto, mas aparentemente diminui a velocidade com mapas maiores e espaço aberto. Também não sei como eles geram vértices e arestas para o espaço mundial com o mapa de altura.
Meu próximo pensamento foi fazer o que o Unreal Engine 3 costumava fazer.
https://udn.epicgames.com/Three/NavigationMeshReference.html
Que era usar raycasts para gerar a malha. Eu não conseguia descobrir como parar o raycasts.
Então ... minha próxima opção foi caixa, possivelmente uma caixa moldada. Crie um volume subdividido com um tamanho que seja uma potência de 2. Alinhe a caixa à grade e atire prismas retangulares para baixo como um raio. Se ele cair em um pedaço de geometria que faz parte do solo e o retângulo não estiver sendo cruzado, deixe um quadrado ali. E continue até que os limites do volume sejam atingidos. Para verificar se as arestas precisam ser vinculadas, suponho que eu possa verificar se a inclinação entre dois pares de vértices está dentro da inclinação que pode ser percorrida, mesclá-las se isso for verdade.
Meus principais problemas são ... isso não parece ser o ideal. Sem pensar nisso, na estimativa, o processo é O (N ^ 3) para um nível de várias camadas. O que pode ficar bem desagradável.
E o último bit é para criar automaticamente grupos retangulares desses quadrados. Não tenho muita certeza de como fazer isso. A implementação Unreal os separa por declives. No entanto, estou tentando manter o formato da grade. Portanto, isso não é totalmente necessário. Ainda existe o problema de criar grandes blocos retangulares para dividir o processo de localização de caminhos em uma base por bloco. Os ladrilhos não podem ser muito grandes nem muito pequenos.
Então as perguntas são ...
Qual seria uma maneira eficiente de gerar essa navmesh cingida? E qual seria uma boa maneira de criar os azulejos?
Respostas:
Um mundo 3D básico pode ser representado por uma malha de navegação que pode ser convenientemente construída na maioria dos mecanismos de jogos. O ator pode viajar ao longo das bordas dos polígonos.
Essa seria uma solução simples. Existem muitos algoritmos para encontrar caminhos e gerar uma navmesh.
Gostaria de compartilhar algo que li há um tempo atrás.
Isso descreve uma possível solução em que podemos dividir nosso mundo de jogo em quadrados. sempre que uma peça quadrada é adicionada ao jogo (quando o jogador se aproxima de uma área / terreno processual), uma peça quadrada é adicionada. No entanto, não precisamos mais calcular toda a navmesh. apenas calculamos esse bloco e o adicionamos ao gráfico existente. Ganho significativo de desempenho lá.
O próximo problema abordado é o movimento irregular do exemplo anterior. Eu posso entender que, considerando curvas futuras e generalizando a direção, reduziria muito o movimento em zigue-zague e tornaria o movimento fluido. Jogos com animação detalhada não revelam isso, mas você pode notar isso em alguns jogos de mundo aberto, onde eu diria que a navegação é feita principalmente.
Quanto à pergunta, eu recomendo que você verifique a resposta do Kromster em uma lista de algoritmos de geração de navmesh.
Verifique também os Sistemas de IA do Left 4 Dead, dos quais os exemplos fazem parte. Muitos tópicos mais interessantes abordados
Boa sorte.
fonte
existem muitas maneiras, por que não torná-lo local para o jogador, fazer uma pequena grade que segue o jogador e verificar em cada interseção se é ou não transversável, como se houvesse um piso lá e fazer um raio para ver se há uma parede / edifício em qualquer lado próximo ..
fonte
Este é um problema que eu já vi em todos os lugares. O truque é "separação de preocupações". "Diga o que?", Ouvi você pensar. O que é exibido na tela NÃO é o que é a "estrutura de dados". Manter o visual separado dos dados para construir o visual é importante. Fazer isso sempre "prova o futuro" do seu jogo quando novas versões de software subjacentes são lançadas.
Crie uma estrutura de dados (aka: model) que represente o seu mundo dos jogos. Em seguida, construa uma "visualização" do modelo de estrutura de dados. Se você deseja mudar o mundo de uma grade quadriculada para uma grade hexagonal, a estrutura de dados (modelo) permanece a mesma, mas a exibição "pintará" (renderizará) uma exibição diferente.
fonte
Faça uma matriz dupla. E então, se um objeto / objetos for impossível de passar, tenha um método para informar à matriz que a posição não é passável. Quando uma IA tenta se mover, eles olham para a matriz dupla e ver se é aceitável.
fonte