Nesta palestra, vamos usar uma navmesh para fazer com que um personagem persiga nosso
personagem em um ambiente. Se você deseja fazer o download do arquivo Zombie Chaser Starter
que acompanha esta palestra, siga-o.
Abra a cena do ZombieChaser que está dentro do arquivo e você encontrará essa configuração aqui. Você tem um personagem de zumbi que está
lá e ela já tem animações, para que você possa vê-la andando e
também
um personagem de jogador. Se você pressionar Play neste momento, verá
que já possui um controlador em primeira pessoa que já está instalado e que é o padrão de
Ativos Padrão que você pode obter com o Unity e que possui o zumbi. A animação está ligada, mas não há nada empurrando o zumbi
para a frente, seja o que for.
Então, vamos ao trabalho.
Primeiro de tudo, precisamos configurar nossa navmesh.
Então, na Hierarquia, você encontrará três coisas. Stevie (nosso zumbi), um controlador FPS
(que somos nós) e depois há o próprio modelo de armazém.
Se você selecionar o pai, terá tudo.
Então, aplicaremos a navmesh a tudo.
A primeira coisa que precisamos fazer, no Inspetor, com tudo o que
está selecionado, basta ir para o 'Static' e transformá-lo em 'Navigation Static' e dizer [Sim, mudar filhos] para que
todos esses malhas serão incluídas no cálculo.
Agora abra sua guia Navegação.
Não vamos alterar nenhuma das configurações padrão aqui, então selecione [Assar]. As configurações padrão são definidas
para um caractere de tamanho médio, que geralmente tem cerca de 2 metros de altura, com raio de meio
metro e tamanho de passo 0. 4 (o que é bom neste caso) e uma inclinação de 45, mas não
há muitas inclinações neste armazém em particular. Há muito mais etapas do que qualquer coisa. Com o cozimento realizado, agora você
pode dar uma olhada ao redor e ver todos os diferentes lugares para onde o cozimento foi
e também há (se formos dar um zoom aqui), você pode ver que ele subiu as escadas, por cima eles podem ver
que subiu as escadas.
Então, se você andar por aqui, poderá conseguir que o zumbi o siga pelas escadas, que é o que
queremos que ele faça.
Agora vamos adicionar um código ao Stevie, nosso zumbi, para que ela nos siga.
Portanto, antes de tudo, precisamos clicar nela na Hierarquia, entrar no Inspetor e adicionar o Nav Mesh Agent, para
transformá-la em algo que possa segui-lo. Você pode ver imediatamente, depois de
fazer isso, o cilindro que contorna o personagem que a empurrará e a impedirá de
encontrar coisas.
Em seguida, precisamos escrever um código que defina o destino do nosso agente.
Então, eu já tenho aqui.
É um arquivo C # chamado 'ChasePlayer'.
Portanto, crie esse arquivo C # e arraste-o e solte-o no personagem zumbi.
Agora basta abrir e veremos o código que está lá.
Então, primeiro de tudo, temos um link para o nosso jogador, porque o zumbi precisa saber onde o jogador está o
tempo todo, para que ele possa continuar ajustando seu destino.
Em seguida, criaremos um link para o NavMeshAgent anexado ao
nosso A. EU. personagem. Então, no
Start, configuramos essas duas coisas.
O jogador será agarrado usando FindWithTag ("Player"), portanto, definiremos a tag do nosso personagem como 'player'
e, em seguida, o agente, como fizemos anteriormente, está apenas agarrando o
NavMeshAgent anexado a este personagem. Agora, porque estamos usando o navmesh, tudo o que
precisamos fazer na atualização é apenas para continuar definindo o destino do agente como a posição dos jogadores.
Portanto, é uma linha de código e a navmesh está praticamente fazendo todo o resto do trabalho para você.
Depois de adicionar isso, salve-o, volte para o Unity e verifique se você tem seu código anexado a Stevie, para
que fique bem aqui embaixo.
Vamos ao nosso FPSController, que é o nosso personagem de jogador, neste caso,
e certifique-se de marcá-lo como 'Player'. A tag 'Player' com um 'P' maiúsculo já existe
como padrão no Unity, então selecione isso. Nesse ponto, podemos pressionar Play e ver o efeito do nosso código.
Agora, quando começamos, imediatamente o zumbi está no topo do nosso personagem e você pode vê-lo lá. Eu vou embora, me viro,
ela está se movendo muito rápido e quando ela se
aproxima de nós, ela acaba exatamente na nossa posição.
Você pode mover-se com as teclas W, A, S, D ou as teclas de seta.
Então, vamos ajustar a velocidade dela e o fato de ela ficar muito perto de nós. Pressione a tecla Escape para liberar o controle
do mouse.
Pare de jogar e selecione Stevie na Hierarquia. No Nav Mesh Agent,
podemos alterar a velocidade colocando-o em 1 e podemos definir a distância de parada.
No momento, está definido como 0 por padrão, mas digamos que queremos que ela esteja a 2 metros de distância quando
parar, em vez de estar bem em cima de nós. Vamos pressionar Play e dar uma olhada
no efeito disso.
Então, se eu me virar, ela parou.
Ela não está tentando nos seguir porque está a uma distância de 2. Agora, se eu for embora, ela
irá lentamente (a uma velocidade de 1) caminhar em nossa direção.
Você também notará que não fizemos nada sobre as animações alinhadas com o movimento.
Não se preocupe com isso neste momento.
Queremos que a funcionalidade funcione primeiro.
Agora, enquanto você está vagando, você pode notar algum comportamento estranho com o zumbi.
Deixe-me mostrar-lhe, então vamos jogar isso.
O que vou fazer é andar atrás dela, em direção à porta verde.
Vou andar para trás, para que possamos ver o que ela faz.
Ela está caminhando em nossa direção ...
mas depois eu vou aqui ...
Ela se vira e vai embora.
Agora não programamos esse tipo de comportamento e é como se ela de repente tivesse perdido o interesse e não
pudesse mais nos ver.
Mas não foi isso que aconteceu.
Ela não é tão inteligente.
Nós não programamos isso nela.
O que ela está tentando fazer é encontrar outro caminho para chegar até nós a partir da
navmesh em que
está e a razão disso é ... deixe-me escapar. Vou rever e ativar a janela Navegação para que você
possa ver a navmesh na janela. Olhando para baixo
aqui, você verá uma lacuna na navmesh.
Agora é muito, muito pequeno, mas ainda é uma lacuna, e Stevie não pode atravessá-la porque ela não acredita que
exista um caminho que possa seguir para chegar de onde ela estava lá, para onde
estamos agora.
Em vez disso, ela acha que seu caminho é seguir outra direção, o que ela é.
Então, ela encontrou um caminho e você pode dizer que encontrou um caminho por causa das áreas escuras
que o algoritmo A * destacou para nós, o que deve percorrer um longo caminho.
Então, ela resolveu o problema de não conseguir superar essa pequena brecha, percorrendo o caminho mais
longo, subindo e voltando e agora de
volta para nós.
Portanto, se tivéssemos que andar para trás e pular essa pequena rachadura novamente, ela vai percorrer o caminho mais
longo novamente, o que é um comportamento divertido de se assistir, mas provavelmente não é exatamente o que
você quer neste caso.
Então, precisamos encontrar uma maneira de preencher essa pequena lacuna aqui.
Agora não é uma questão de remodelar ou adicionar mais modelos ou qualquer coisa a ele.
É apenas uma questão de usar o que é chamado de 'Off Mesh Links'. Um link fora da malha é um link que permite que um
agente salte pelas lacunas nas malhas.
Então, nós temos nossas 2 malhas aqui. Vamos
ver se consigo selecioná-los. Então essa é essa e eu selecionarei a outra
que escolherá aquela lá em cima. Então esses são 2 pedaços de chão. O que vou fazer com eles é ir até a
janela Navegação ...
você deseja ir para a guia Objeto e marcar 'Gerar links offMesh'. O que isso fará é vincular esses
dois aviões.
Voltamos à guia Bake e, em seguida, descemos para onde diz 'Links gerados fora da malha' e
configuramos a 'Distância do salto'. No momento, ele está definido como
zero; portanto, se você tentar assar neste momento, não obterá nenhum link criado nessas duas malhas.
Digamos que coloque um valor como 2 aqui e pressione bake e você verá esses círculos surgindo na própria malha - eu
posso ampliar o zoom para você
e apenas orientar um pouco e você verá aqui que ele cria links para que o
zumbi será capaz de se mover por essas malhas.
Vamos pressionar Play e experimentar. Ok, então eu
vou andar por aqui e até a porta verde e ela vai seguir e eu vou atravessar a brecha
e você pode ver que ela pulou bem essa brecha e agora ela vai me
seguir onde quer que seja existe aquela linha azul.
Agora, a última coisa que quero lhe mostrar é outro tipo de link fora da malha, mas onde há uma queda
e uma lacuna.
Então, o que já fizemos foi criar um perto da porta verde, que preenche essa
pequena lacuna, mas eu quero que Stevie possa me seguir do topo desse contêiner em particular,
no qual
eu posso chegar, mas ela não pode. Não há ligações para se levantar. Assim, podemos fazer uma ligação facilmente,
aumentando o tamanho da etapa que ela pode subir e, se a definirmos como 1. 6 e, em seguida, assar
e Stevie eu também vou acelerar até 5.
Vamos apenas pressionar Play e poderemos ver que ela vai me seguir muito rápido naquele
contêiner.
Então eu vou pular aqui em cima
e ela está lá e você pode ver se eu recuo um pouco, ela está naquele contêiner por causa do tamanho da etapa
que permite que ela suba lá.
Embora se eu pular e olharmos para trás, ela terá que seguir o outro caminho para voltar para mim.
Agora, se você assistiu The Walking Dead, sabe que os zumbis são muito estúpidos e se você caiu da
beira de um penhasco, eles também!
Então, vamos modificar essa navmesh para permitir que os agentes passem de uma certa altura de queda.
Para fazer isso, vamos selecionar de onde estamos saindo e também para onde estamos indo (não importa em que
ordem você os seleciona).
Então, selecione as duas partes que queremos vincular a um 'link fora da malha' e, em
seguida, passaremos para a Navegação, em Objeto, clique em 'Gerar Links OffMesh' para essas duas caixas em particular e volte
em Bake e desta
vez alteramos a 'Altura da Queda'.
Então vamos fazer 10 porque
é uma boa distância para descer e clicar em [Bake].
O que você encontrará é que aparece uma série de círculos vinculados (se eu puder me virar para que você possa
vê-lo um pouco melhor). Ali estão eles.
É como um efeito cascata, onde você pode ver que os círculos aqui em cima estão vinculados
aos círculos aqui em baixo.
Essas são as posições em que Stevie será capaz de pular e nos seguir a partir daquele contêiner.
Então pressione Play e nós tentaremos isso.
Então, queremos ir por aqui, subir as escadas ...
até este contêiner e
... onde ela está?
Aqui vem ela.
Ok, agora quando eu pulo e me viro, ela nos seguiu até lá, em vez de voltar pelo
caminho mais longo.
Ok, é assim que um personagem o segue, mas também como gerar seus 'links fora da malha', que são realmente
importantes quando você tem pequenas lacunas e coisas engraçadas acontecendo em sua navmesh
que você deseja que seus agentes possam para navegar repetidamente.