Bem-vindo de volta à Parte 2 desta palestra, na criação de waypoints e A * pathfinding.
Até agora, criamos um mapa com um tanque que é o nosso NPC e uma série de pontos de
referência nos quais criamos arestas para construir um gráfico.
Também adicionamos o código do gráfico, que contém um algoritmo A *, e poderemos solicitar ao gráfico que nos encontre
um caminho entre um e outro de nossos waypoints. No código FollowPath anexado ao nosso
tanque, há
duas funções públicas.
Uma é ir ao heliporto ou GoToHeli e a
outra é GoToRuin, que nos levará até a parte de trás do mapa, onde há um
tanque em ruínas.
Cada um deles executa o algoritmo A * do nosso nó atual para uma posição especificada com base
em onde o waypoint está, na matriz do waypoint.
Agora, nosso trabalho é chamar essas funções de fora daqui e usar os botões.
Então, com tudo pronto e pronto, vamos para a Hierarquia e clicaremos com o botão direito
do mouse, desceremos para 'UI' e encontraremos 'Button'. Isso criará um Canvas, um Button (obviamente) que será
criado na
tela e neste EventSystem.
Agora este botão aparecerá na cena.
Se você for para a visualização 2D e diminuir o zoom um pouco, encontraremos o botão ... lá está e está aparecendo na
tela.
Esse quadro branco mostra os extremos do que você tem na visualização Jogo, que está aqui. Você pode ver o botão lá e
a cena em si é aqui em baixo.
Se você não usou o sistema de interface do usuário antes, observe que a cena em si (a cena 2D) e a
cena 3D não estão
relacionadas uma à outra nesta exibição. Portanto, não pense que você precisa mover o botão e colá-lo por
cima da paisagem, porque não é assim que funciona.
Este botão está nesta tela, dentro dessas dimensões.
Vamos movê-lo para o canto
superior, então basta selecionar o botão e clicar nesta caixa de local Rect Transform e queremos clicar no canto superior e
manter pressionada a tecla Alt ao mesmo tempo e clicar novamente, o que reposicionará o botão
naquele canto superior.
Agora eu não quero esse botão EXATAMENTE no canto superior, então eu vou selecioná-lo e
movê-lo um pouco mais para baixo, então quando você olha para a visualização do jogo, ele não está preso ali, é ali.
Tudo certo.
Então, a outra coisa que queremos fazer é mudar esse texto. Sob o botão, se você clicar em baixo, há um
elemento
de texto e isso nos dá o texto exibido no botão.
Será 'Go to Helipad' e é isso que ele fará quando clicarmos nele. Antes que o botão possa executar o código que queremos,
esse código precisa existir
na Hierarquia em algum lugar e, atualmente, não existe. O código FollowPath está pronto para
ser anexado ao nosso tanque. Selecione seu tanque, arraste e solte o FollowPath nele.
Agora, se você se lembra, há uma referência de gerente de waypoint que ele precisa ter, para que ele possa
se apossar de todos os waypoints e do gráfico etc.
Portanto, basta adquirir o seu WPManager e conectar-se ao seu tanque.
Com isso feito, agora podemos voltar ao botão e, na parte inferior dos botões do Inspetor, há uma
área 'Ao clicar'.
Agora pode parecer que esta lista está vazia.
Clique no sinal '+' e, em seguida, queremos selecionar o objeto que possui esse código.
Esse é o tanque.
Então coloque o tanque lá dentro e selecionamos a função.
Então, desça essa caixa e você verá que o FollowPath está anexado a ela.
Agora na lista (isso é apenas fora da tela
- podemos trazer isso daqui a pouco) 'FollowPath' e, em seguida, ele mostrará tudo o que pode ser executado
associado ao código FollowPath e você encontrará as funções GoToHeli e GoToRuin em lá.
Assim, podemos apenas selecionar o GoToHeli
e agora, quando esse botão for clicado, ele executará essa função no tanque, o que é muito agradável e conveniente.
A última coisa que precisamos fazer antes de pressionar Play é garantir que poderemos ver
o que está acontecendo em nossa cena do jogo. Você pode ver aqui que o jogo atualmente não está olhando para onde queremos.
Então, eu vou para a cena e sair da visualização 2D, encontrar o tanque e depois rolar para fora
e apenas manipular isso.
Eu só quero ver o que está acontecendo quando rodamos, basicamente.
Então lá vamos nós.
Agora vamos selecionar a câmera e selecionar 'GameObject> Align With View' para que o jogo esteja agora olhando para a cena em
que poderemos ver o que está acontecendo.
Certo, agora pressione Play.
Nada vai acontecer.
Observe que todos os waypoints desaparecem
e isso ocorre porque o próprio código do gráfico agarra todos esses nós e desativa
todas as coisas que estão aparecendo, para que você não os veja na execução final do jogo.
Pressione [Go to Helipad] e você poderá ver que o tanque vai para o primeiro waypoint necessário
porque é o mais
próximo daqui e então seguirá o caminho diretamente de lá para lá e
quando chegar ao heli, pare porque não há mais nada a fazer a partir daí.
Está bem.
Então, agora vamos programar para ir para as ruínas. O processo é o mesmo, segure o botão na tela
e pressione Ctrl-D, que criará um botão duplicado. Vá para a Cena e vá para a
versão 2D da cena, encontre esse botão, agora para selecioná-lo, basta clicar neste ícone aqui, para que você tenha os pequenos pontos
azuis ao seu redor. Isso permite que você redimensione e mova. Verifique se você está movendo o caminho certo. Mova isso
para baixo logo
abaixo e enquanto estivermos lá, mudaremos o texto para Go to Ruin.
Agora ele terá um 'On Click' no botão, então você vai até o botão.
Ele possui o 'GoToHeli ()' porque o duplicamos no botão anterior.
Agora podemos encontrar a outra função, que é 'GoToRuin', e adicioná-la lá.
Tudo bem, agora vamos pressionar Play e poderemos ir para o heliporto, que levará nosso tanque antes de tudo ao
nosso ponto atual até aqui, quando será
definido como o waypoint atual ...
e pare e clique em [Go to Ruin].
Agora, esse caminho não voltará para lá, porque é muito mais rápido percorrer
esse caminho por causa da distância que o A * está calculando e você pode ver agora
que está seguindo o caminho, havia um waypoint ali, há um waypoint por aqui que ele tem que chegar, para
evitar essas
rochas e então ele irá para o waypoint lá em cima.
OK ótimo.
Então está funcionando.
A última coisa a tentar é o ponto que tínhamos aqui, onde há apenas uma conexão de mão única.
Então, duplicamos o botão do Ruin, movemos para baixo e depois alteramos o texto para 'Ir para os tanques' e,
para o seu botão, ele executa uma função que ainda não
escrevemos.
Então, precisamos voltar para o código FollowPath e copiarmos um dos métodos 'GoTo' que
tínhamos
antes e colá-lo embaixo. Dessa vez, vamos 'GoToTanks' e os tanques estão no ponto de passagem número 9 (que é
8 na matriz) e garantimos que definimos o waypoint atual de volta para 0
antes de prosseguirmos.
Portanto, salve isso, volte para o Unity e, em seguida, segure esse botão e defina sua função para o que acabamos
de escrever, que era 'GoToTanks'. Com tudo isso salvo, estamos
prontos para jogar.
Então, vamos começar indo direto para o tanque.
Primeiro de tudo, ele tem que ir para o seu waypoint atual, que é o primeiro
aqui em cima e depois seguirá esse caminho que possui.
Não pode passar por aqui, porque tem que voltar para este aqui embaixo, que é o nosso cruzamento.
Agora ele vai aparecer e acabar perto dos tanques de armazenamento. Neste ponto, digamos que
queremos ir para a ruína. A distância mais curta seria assim, mas não pode voltar ao longo
desse caminho.
Então, vamos dar uma olhada no que acontece.
Vai dar a volta, porque encontrou um caminho que vai
dar a volta e depois voltará e se juntará ao waypoint que está aqui, para pegar
o aqui e terminar ali.
Então esse é o algoritmo A * e os waypoints e você pode ver o quão poderoso ele é. É muito rápido calcular distâncias e
você pode usá-las para navegar em todos os tipos de terrenos diferentes.
Então você sabe, divirta-se!
Brinque com ele, coloque seus próprios mapas e veja o que você pode criar.