Nesta palestra, começaremos a olhar para um dos A. mais fundamentais EU. técnicas utilizadas na navegação: Waypoints.
Os waypoints são simplesmente posições em um mapa que, quando navegadas em sequência, produzem um caminho.
É o mesmo sistema usado em um carro G. P. S.
que fornece instruções sobre onde dirigir. Os waypoints são um sistema fácil de implementar em um
NPC, pois os fazem parecer mais
inteligentes
do que são e, fornecendo a eles um conjunto seguro de locais em um mapa para se mover, eles também podem evitar obstáculos.
Já criamos um NPC que pode se mover e seguir a localização de uma meta. Atualizar isso para um sistema de
waypoint é simples. Para acompanhar, faça o download
do projeto associado a esta palestra e abra a cena do tanque. Na cena, você encontrará um pequeno tanque roxo e
é este
pequeno tanque roxo que será o nosso NPC. Para começar, precisamos criar alguns waypoints e eu costumo
criar meus
waypoints a partir de esferas para que eu possa ver onde eles estão.
Então, na Hierarquia, clique com o botão direito do mouse e vá em 3D Object> Sphere e isso criará uma esfera para você.
Também vou colorir em vermelho. Há um material vermelho neste arquivo de projeto.
Isso é apenas para que
possamos vê-lo e você também queira tirar o Sphere Collider, porque você não quer que ele seja um objeto de física.
Tudo isso é um marcador para o nosso tanque navegar.
Posteriormente, você pode até desligar o renderizador de malha quando não quiser ver os pontos
de referência, mas ao editá-los, é bom se você souber onde eles estão 'exatamente', em vez de apenas uma transformação.
Certo, esse é um
waypoint e, para torná-lo, criei um tag e você precisará atribuí-lo a essa esfera. Basta ir até o
inspetor e examinar a lista e você ' Vou encontrar 'waypoint'.
Se não estiver lá (ou você estiver criando seu próprio sistema), você precisará adicionar uma tag e, em seguida, voltar
e atribuir novamente sua tag de waypoint a essa esfera.
Observe também como está escrito, porque
vamos procurá-lo mais tarde.
Portanto, este é 'waypoint', tudo em minúsculas.
Portanto, há o nosso primeiro ponto de referência.
Agora, com o criado, você pode movê-lo para o lugar, pressionar Ctrl-D, fazer várias cópias e fazer um
pequeno circuito para o tanque se movimentar.
Nem precisa ser perfeitamente redondo.
Apenas vá com algo assim.
Em seguida, criaremos um script que seguirá os waypoints.
Então vá para Projeto> Criar> Script C # ... vamos chamar esse WaypointFollow
e abri-lo e adicionaremos o código a seguir.
O código inclui muitas das coisas que fizemos antes e que fizemos com o
nosso exemplo de zumbi de movê-la, segui-la e derrapá-la.
Então você verá a mesma dinâmica em um momento em que chegarmos lá em baixo.
Antes de tudo, porém, você precisa de uma variedade de objetos de jogo para armazenar todos esses pontos
de referência e vamos preenchê-lo automaticamente.
Em seguida, um 'int' que é o waypoint atual.
Portanto, é o índice desse array de waypoints para a esfera em que estamos caminhando.
Depois disso, você tem os suspeitos de sempre com velocidade, precisão e velocidade
de rotação.
Agora, na função Iniciar, estamos configurando o array de waypoints para igualar todos os objetos do jogo
que possuem a tag 'waypoint'.
Portanto, isso está preenchendo automaticamente esse array de waypoints para você.
Se você quiser especificar os waypoints, poderá inseri-los manualmente nessa matriz por meio
do Inspetor e, em seguida, colocá-los na ordem em que deseja.
Mas, por enquanto, estamos fazendo isso automaticamente, porque é bem mais rápido. No LateUpdate, é onde todo o
trabalho vai acontecer e você pode ver que é realmente muito curto.
Primeiro de tudo, vamos verificar se temos algum waypoint. Se não o fizermos, voltaremos
porque não há sentido em mudar para lugar algum.
Então, temos nosso lookAtGoal sendo construído novamente.
Novamente, esse é um tipo de LookAt 2D, na medida em que está na mesma altura do tanque,
mas no x e z do waypoint. Se você quisesse um sistema 3D de waypoints,
onde você tem um avião ou um pássaro ou algo que possa se
mover em três dimensões, obviamente você colocaria os waypoints na posição y aqui, em vez
dos tanques. -posição.
Em seguida, calculamos nossa direção como antes
e depois executamos o slerp, que girará o tanque em direção ao waypoint (ou nessa direção).
Certo.
Em seguida, testamos nossa magnitude como sendo 'menor que' precisão, para dizer se estamos perto o
suficiente desse ponto de referência específico.
Se estivermos perto o suficiente do waypoint em particular, aumentamos o waypoint para o qual estamos indo
em 1.
Então, digamos que estamos indo para o waypoint 0
e chegamos a ele com precisão, isso
irá para o waypoint 1 e nos fará começar a olhar para o waypoint 1 e passar
para o waypoint 1.
Tudo certo.
Agora, se chegamos ao final dessa matriz, ficamos sem waypoints. Depois, voltamos ao primeiro ponto de
referência.
Então, isso vai dar um ciclo para nós. Depois de tudo o que acontecer, faremos o nosso Translate.
Observe que o Translate não é restrito de forma alguma, apenas acontecerá independentemente de qualquer coisa,
exceto que não há waypoints. Então, estamos virando, estamos olhando para o
waypoint que deveríamos olhar e então estamos empurrando o tanque para a frente, porque toda essa atualização é
sobre percorrer os waypoints, para que o tanque nunca pare em nada.
Salve isso e, em seguida, volte para o Unity e o que você quer fazer é selecionar seu tanque
e arrastar e soltar o WaypointSiga para o tanque.
Agora, no Inspetor, você verá os pontos de referência aqui.
Agora, se você quiser colocar seus pontos de referência, poderá arrastá-los e soltá-los, como eu disse antes, da
Hierarquia para esse array e depois colocá-los e alterar a ordem que
você deseja, mas estamos fazendo isso automaticamente , então não há necessidade neste caso.
Então, depois de fazer isso, pressione Play e você verá que o tanque começa a seguir
seus waypoints.
Ok, então vamos a este ...
e então ele vai virar e ir para este ...
Se isso for um pouco
lento para você, apenas voltamos aos waypoints e modificamos a velocidade.
Vamos colocar isso em 3.
Agora, se você aumentar a velocidade, também precisará aumentar a velocidade
de rotação, caso contrário, verá que recebe
um tanque que oscila bastante em grandes arcos.
Então, vamos ver se isso ajuda.
Não é tão ruim.
Você pode ver que é preciso um arco muito grande para girar, porque essa velocidade de rotação é um pouco mais lenta que
a velocidade real de avanço, mas ainda funciona.
Chega perto o suficiente dos pontos.
Agora lembre-se, se você receber um tanque que começa a girar em torno de um waypoint ou começa a tremer em um waypoint, é
porque a precisão é muito baixa e você precisará aumentar sua precisão.
Vamos ver se podemos forçar o tanque a fazer isso.
Abra seu script e a precisão (atualmente 1), vamos torná-lo 0. 5)
Salve isso e vá, vamos voltar e executar
isso e vamos ver, se o tanque nunca atingir o waypoint, ele começará a circular o
waypoint porque está constantemente mudando seu vetor de direção para apontar para a esfera, enquanto também está sendo empurrado para a
frente .
Agora, ele simplesmente não pode chegar perto o suficiente por causa da velocidade e da rotação para chegar
a esse 0. 5 distância
desse waypoint e, portanto, ele ficará preso.
Portanto, é a velocidade, a velocidade de rotação e a precisão que a ALL afeta se o tanque
atingirá esse ponto de referência específico ou não.
Portanto, sempre considere essas informações e verifique o que está acontecendo no que diz respeito ao comportamento.