Vamos transformar nosso sistema de waypoint existente em um que use uma navmesh e faremos isso
para fornecer uma cobertura ampla e ampla do sistema navmesh antes de começarmos a aprofundar em
outras palestras.
Então, começando com o código que você concluiu na aula anterior, onde o
tanque foi comandado por botões para seguir esses pontos de referência que colocamos, substituiremos o
código A * que inserimos lá manualmente com a navmesh.
Agora, para transformar o ambiente em uma malha de navegação no Unity,
a primeira coisa que você precisa fazer é encontrar todos os bits e partes que farão parte da malha
de navegação e esses são todos os modelos. Nesse caso, tudo isso está sob
o LevelArt na Hierarquia e inclui coisas como o plano do solo, casas de concreto, tudo o que está incluído.
Com esse mapa em particular, ele já foi configurado para usar
navmeshes, mas a maneira como você faz isso do zero é selecionar o item que deseja incluir no
sistema navmesh.
Portanto, neste caso, estamos selecionando 'Concreto', que é aquele pedaço de concreto ao redor do tanque. No Inspetor, ao lado do nome
do objeto em que ele está estático e uma pequena caixa suspensa, você o solta
e
(deixe-me fazer isso um pouco menor ...
ok)
e aí dentro, você está procurando por 'Navigation Static' e deseja que ele seja ativado e tudo
o que está ativado, todas as malhas serão incluídas no cálculo de navmesh.
Assim, com isso, você pode abrir a janela Navegação. A janela de navegação pode ser encontrada
em 'Janela> Navegação'.
Normalmente, tenho o cargo sob o inspetor, porque você não vai muito a
sério depois de criar seu mundo.
Agora, as guias aqui, explicarei em palestras posteriores, mas
por enquanto vamos fazer uma demonstração muito rápida de como isso funciona.
Vá para a guia 'Assar'.
Agora, a guia Bake processará a navmesh para o seu terreno com base em todos os objetos
que você tornou a 'navegação estática' e você fará isso clicando no botão Bake.
Depois de fazer isso, você verá que seu mapa muda e você obtém todas essas áreas azuis. Agora, essas são as áreas
que podem ser percorridas.
Eu sei que eles são tranquilas ... se rapidamente passarmos para a guia Áreas na navegação,
você verá que essa cor azul significa que os polígonos gerados estão onde o agente pode andar e é configurado apenas
no momento para 'Walkable' ou 'Not Walkable '. Também há um 'Jump' lá por padrão
também.
Agora, esses 'walkable' e 'not walkable' são todos determinados pela maneira como seu agente é configurado.
Por enquanto, estamos apenas seguindo o padrão.
Agora, a outra parte de uma malha de navegação é o próprio agente e para definir o que é um agente e o que ele
sabe sobre a navmesh, para que possa encontrar o caminho em
torno da navmesh, é necessário adicionar um componente do agente de navegação aos seus NPCs.
Nesse caso, é o tanque verde; portanto, se você selecionar o tanque verde, no Inspetor
[Adicionar componente], procuraremos o 'Nav Mesh Agent'. Adicione isso. Isso fará com que o tanque adira imediatamente a essa
malha de navegação, para que ele possa usar e encontrar a malha de navegação.
Até agora, estamos codificando todos os comportamentos de direção para nossos NPCs. Agora que você transformou o tanque em um
agente de navmesh, ele já será programado com movimento e velocidade e velocidade angular, aceleração e todas essas coisas,
e você encontrará as configurações dos componentes que acabou de adicionar ao
tanque. .
Novamente, por enquanto, vamos deixá-los como padrão, mas fique à vontade para dar uma olhada no que são. Então você tem velocidade,
velocidade angular, aceleração.
Você também pode definir a Evitação de Obstáculos de quão longe ele deve ficar longe das coisas.
Agora é este Nav Mesh Agent que vamos pegar com o script e depois dizer onde está
o nosso waypoint.
Então agora vamos reescrever nosso script FollowPath, basta abrir isso.
No momento, estamos fazendo tudo
isso manualmente, mas agora o sistema de navmesh no Unity vai assumir o controle, então muitas
das coisas que temos aqui, não precisamos mais.
Então, primeiro de tudo, podemos nos livrar de
nossas velocidades e objetivos. Então podemos nos livrar do nosso sistema de nós que temos e também do gráfico. Também não precisamos mais
disso.
Estou mantendo o gerente de waypoint aqui porque ele conseguiu nossos waypoints que colocamos
no mapa, embora agora que a navmesh esteja no controle, os waypoints não serão usados como caminhos entre pontos, mas como um
destino ou uma meta que você deseja alcançar. O pathfinding atual agora é feito pela
própria navmesh e provavelmente descobriremos que o tanque seguirá rotas diferentes agora
que está usando isso.
Portanto, no Start, não precisamos de um currentNode e não precisamos de nosso gráfico configurado.
Vamos
deixar nosso GoToHeli e GoToRuin lá.
Vou comentar isso porque precisaremos disso como referência em um momento
e, em nosso LateUpdate,
não precisamos de NENHUM código, portanto, vamos nos livrar de tudo e esvaziá-lo completamente.
O agente navmesh agora fará todo o trabalho para o nosso tanque, por
isso precisamos agarrá-lo. No topo,
declararei um link para esse agente. Então criamos um
UnityEngine. AI. NavMeshAgent chamado 'agente'.
E então, no Start, usaremos o GetComponent para agarrar isso. Para definir a meta do agente, faremos isso
dentro dos 2 métodos que escrevemos que são executados pelos botões.
Então é bem simples mesmo.
Nós agarramos esse agente, então '. SetDestination 'e é esse destino que será o local do
waypoint para o qual queremos ir. Novamente, esses não são pontos de referência, são apenas locais de
objetivos no mapa.
Nesse caso, é wps [4].
Portanto, é a nossa esfera vermelha que está na posição 4 da matriz e queremos a 'transformação. position 'porque estamos indo para uma posição e
é disso que SetDestination precisa.
Agora, para o Ruin, podemos apenas copiar esse código e colocá-lo aqui e
definir a posição para wps [0], para que o destino que você colocar aqui apenas precise ser uma
posição e possa ser outro agente que esteja se movendo um mapa ou um local definido em qualquer lugar
dentro desse agente.
Certo.
É tudo o que você precisa fazer.
O código do agente e o código navmesh fazem todo o resto do trabalho para você, então salve isso
e voltaremos ao Unity. Pressione Play.
Agora sem destino, obviamente o tanque não vai a lugar algum, mas vamos tentar chegar
ao heliporto, que fica aqui.
Pressione [HeliPad].
Você vê que o tanque virou. A virada, a velocidade que está se
movendo, está tudo definido no tanque no agente de navmesh.
Portanto, agora o agente navmesh está lá, você notará que ele também tomou um atalho e não seguiu
os caminhos reais do waypoint que configuramos no sistema anterior porque eles não são mais necessários.
Então, vamos tentar ir para a ruína e ver em que direção ela vai desta vez.
Então, isso vai voltar para lá.
Parece que vai dar um atalho na esquina porque está calculando a distância mais curta para chegar lá,
e é isso que está descobrindo que a malha de navegação é e você pode ver, bem, até levou um
atalho entre os prédios e até onde o Ruína é. Se dermos uma olhada
na cena e clicar na guia Navegação, você verá que o tanque PODE mover-se entre os prédios.
Portanto, se o tanque era muito largo, é quando você pode voltar e definir o tamanho do agente para que
ele não caiba nessas lacunas específicas e analisar todas essas pequenas nuances e mudanças que você
pode fazer a seguir. palestras.
Isso foi apenas para mostrar o que os navmeshes podem fazer e como são fáceis de configurar, apenas com as
configurações padrão.