Nesta palestra, mostrarei como levar sua Máquina de Estado Finito criada na última série de palestras
com o tanque e os waypoints e transferi-la para um NavMesh.
A primeira coisa que você precisa fazer é preparar sua geometria em cena para o NavMesh.
Agarre algo que você queira fazer parte do seu NavMesh e no Inspector, você verá
no canto superior este pequeno 'Static' e uma caixa suspensa.
Deixe-me mudar isso aqui.
Quando você o solta, você deseja marcar 'Navigation Static'.
Agora esse é o plano do solo.
Se você estiver usando este modelo que eu forneci (ou que o Unity também forneceu), tudo estará marcado como
pronto para o NavMesh.
Deixe-me dar uma olhada nas rochas.
Então, basta clicar em uma pedra aqui e dar uma olhada no que está marcado como e você verá
que também está incluído como uma estática de navegação.
Então, uma vez que você tenha feito isso com todos os pedaços que farão parte do seu NavMesh, NÃO
do seu personagem ou NPC - você não os quer envolvidos. Os waypoints em si também não fazem parte
do NavMesh.
Então, minhas pequenas esferas que eu costumava representar onde estão meus pontos de referência, NÃO são estáticas de navegação.
Então, apenas a geometria do mapa.
Agora, depois de fazer isso, você precisa abrir a janela Navegação.
Ok, então definir esses valores e cozer é praticamente tudo o que faremos para configurá-lo.
O próximo passo é tornar o tanque um 'NavMesh Agent'.
Então selecione seu personagem (neste caso, o tanque) e, no Inspetor, você deseja adicionar componente
e adicionar o 'Nav Mesh Agent'.
Agora, para que o agente saiba sobre os pontos de referência, precisamos defini-los como um destino para o
Nav Mesh Agent que está anexado ao nosso tanque.
Agora, se você se lembrar do tutorial anterior, fizemos muitas mudanças no script Patrol, que está aqui e
você pode ver que eu já atualizei a parte que precisamos e está aqui.
Então, ao invés de fazer o slerping e a tradução manualmente, basta definir o destino
do nosso 'agente' e fornecer o waypoint atual.
Então deixamos o cálculo dos waypoints e distâncias aqui, mas apenas usamos o método
SetDestination e colocamos uma posição em algum lugar dentro dos limites de onde
o NavMesh e nossos waypoints vermelhos estão. O que chamamos de 'agente' nesse script é o Nav Mesh Agent
anexado ao tanque.
Para o script Patrol acessá-lo, no script NPCBaseFSM, adicionei um
'UnityEngine público. AI. Agente NavMeshAgent '. É isso que estamos usando
no script Patrol e, em seguida, configurando isso no OnStateEnter aqui, que apenas agarra o Nav Mesh Agent que anexamos
ao tanque verde e é isso que está fazendo todo o trabalho para nós.
Portanto, se você salvar esse código e voltar ao Unity e
pressionar Play, verá tudo em ação ...
Então, tudo o que fiz foi adicionar 2 ou 3 linhas de código e configurar a geometria na cena
para ser
um NavMesh e alteramos completamente o comportamento desse sistema de waypoint.
Agora, esse agente está um pouco relaxado,
até onde ele passar por aqui, você verá. Quando ele chega a um waypoint, ele meio que
fica relaxado, se ele ultrapassa um waypoint, ele reverte um pouco, é bastante suave e fluido e parece um pouco
macio demais para um tanque.
Então, o que você pode fazer é ir até as configurações do tanque e olhar
para coisas como alterar a velocidade, alterar a distância de parada, a aceleração, a frenagem automática, ativar ou
desativar
a distância de parada
que poderemos colocar. 2, vamos aumentar a velocidade angular para 200 e depois jogar e ver como é e como isso
afeta o giro.
Então desta vez ele não ficou preso lá atrás.
Tem uma maneira muito mais agradável de virar agora quando ele chega ao ponto de passagem, vê como ele não vira e se
move ao mesmo tempo?
Então, novamente, realmente depende de você o comportamento do seu NPC em particular.
Por fim, se você quiser que seu tanque ataque o personagem do jogador, é uma
questão de entrar no código em que temos tudo pronto e aqui no OnStateUpdate, onde costumávamos ter o 'virado
para o oponente' e depois deslizando e depois
traduzindo, tudo o que fazemos é mudar isso para 'agente. SetDestination 'e defina o destino para o oponente, onde
o oponente é nosso personagem.
Lembre-se, você não quer que o personagem do jogador tenha algo a ver com o NavMesh, portanto os waypoints não
fazem parte do NavMesh e o personagem do jogador não faz parte do NavMesh.
Eles são locais no NavMesh. Isso faz sentido?
Eles precisam estar
dentro do NavMesh, caso contrário, seu personagem e os NPCs nunca serão capazes de encontrá-los ou alcançá-los.
Ok, então com isso aí, vamos apenas brincar e dar uma olhada no comportamento agora do nosso tanque.
Então, se chegarmos perto o suficiente do nosso tanque, para que possamos desencadear isso, ele decidiu que
viria nos atacar.
Ele tem jogadas muito melhores do que
antes, na medida em que consegue deslizar pela esquina! Agora meu tanque tem a vantagem de eu poder passar pela geometria, ele
não tem a física, mas ele não pode.
Ele tem que seguir o NavMesh, então você verá que ele tentará encontrar seu próprio caminho de volta para me atacar.
Agora tudo isso está acontecendo no NavMesh. Nós não programamos nada disso, então
é assim que o sistema NavMesh é poderoso e ele continua tentando me perseguir, até que eu consiga
ultrapassá-lo. Nesse
ponto (parece que
eu já tenho), ele vai volte para o patrulhamento.
OK, então esse é o muito, muito básico da configuração de um NavMesh com um sistema de waypoint existente.