Antes de prosseguir e criar um sistema completo de waypoints, você provavelmente deve saber que
ele já está disponível no Unity.
Então construímos nosso próprio pequeno circuito de waypoint, mas
agora vou mostrar o que o Unity tem disponível para você.
Portanto, se você pegar o código que incluí como recurso nesta palestra,
você encontrará um script WaypointCircuit e WaypointProgressTracker e os arrastará e soltará em seu projeto.
Esses dois arquivos foram obtidos de um download e importação do pacote Utility.
Portanto, está em Ativos> Pacote de importação> Utilitário. Isso trará uma pasta chamada Standard
Assets e, em algum lugar, você encontrará esses 2 scripts, mas eu os incluí para que você possa
adicioná-los rapidamente e eu mostrarei a diferença que você usa.
Primeiro de tudo, existe um circuito de waypoint e isso definirá o que alcançamos com uma matriz e essas bolas,
mas você ainda precisará ter as bolas lá, porque elas são waypoints.
Então, primeiro, na Hierarquia, Criar Vazio e chamaremos isso de nosso WPCircuit. Para o WPCircuit, arraste e solte o
script WaypointCircuit, obtenha todas as esferas que você está usando para seus waypoints,
colete-as e arraste-as e solte-as para que sejam 'objetos filhos' do WPCircuit.
Agora selecione o pai (o WPCircuit). No Inspetor, onde você adicionou esse código, você
verá um botão que diz [Atribuir usando todos os objetos filho]. Se você clicar nisso, ele criará um waypoint automático
para todos os seus objetos.
Também os vinculará a uma boa curva (que não podemos ver porque minhas esferas estão um pouco abaixo do
solo).
Se eu apenas levantar isso, você verá esse circuito sendo desenhado na cena e poderá ver facilmente que
possui um circuito e nenhum dos waypoints na ordem errada por ser
um circuito completo.
Se você quiser alterar a ordem em que aparecem, neste componente do Waypoint Circuit que você
adicionou, deixe-me pegar
o segundo e eu vou subir e você verá o resultado.
Agora que a Esfera (1) é a primeira e a Esfera (0) é a segunda, você obterá esse cruzamento e
pode ser o que deseja.
Isso é bom.
Você também pode agarrar seus waypoints e movê-los manualmente, também, para alterar a ordem específica
do seu circuito.
Portanto, essas são as duas coisas que você deve estar ciente ao configurar o circuito.
Vou deixá-lo atravessado por um pouco de interesse.
Neste ponto, se você quiser continuar usando o script WaypointFollow que já
escrevemos no seu tanque, será necessário atualizá-lo para usar o novo circuito do waypoint, em vez das esferas individuais na matriz
de objetos do jogo que tínhamos.
Então, vamos dar uma olhada em como atualizaríamos o script. De volta ao WaypointFollow, em vez dessa matriz
pública GameObject
no topo, agora agarramos o próprio circuito.
Agora esse circuito é do tipo WaypointCircuit e está no espaço de nome UnityStandardAssets. Utilitário, porque lembre-se de que eu disse que ele vem na
importação do Utilitário se você o retirar daí,
portanto, certifique-se de declarar assim. Será público, para que possamos
dizer onde está o circuito e arrastá-lo e soltá-lo no Inspetor.
O restante do código está ok aqui em cima. No Start,
você não precisará mais obter seus waypoints com um FindGameObjectsWithTag.
Então, podemos comentar isso. No LateUpdate, onde estamos obtendo cada waypoint e, em seguida, voltando-se
para ele e movendo-se para
ele, apenas precisamos mudar nossa referência ao que estamos obtendo. Então, em vez do objeto do jogo
indexado pelo waypoint atual, estamos obtendo o waypoint atual da lista de waypoints que vem do circuito.
Então, a primeira coisa que fazemos é verificar a duração do circuito.
Então, ao invés de waypoints. comprimento que tínhamos antes, agora é circuito.
Waypoints.
circuito de comprimento. Waypoints. comprimento e quando
atingimos nosso objetivo, estamos recebendo o circuito. waypoints [currentWP]. posição. x para que a transformação tenha
entrado aqui porque esses pontos
de referência têm as posições diretamente a partir daí, você não precisa da transformação.
Portanto, apenas certifique-se de que você não entendeu. Novamente, se você estiver no espaço 3D e quiser
usar o z também para
o waypoint, vá em frente ... coloque aqui, em vez da altura do seu personagem.
A outra coisa que você precisa mudar é apenas dentro da direção. Na parte de magnitude em que estamos testando,
se ficarmos sem waypoints e voltarmos ao início novamente, precisamos pegar
o circuito. Waypoints. comprimento, não pontos de passagem. comprimento que tínhamos antes.
Então salve isso e volte para o Unity e pressione Play e você poderá
assistir seu tanque se movimentar pelo seu circuito de waypoints. Portanto, são os mesmos waypoints que tínhamos
antes, mas agora estamos apenas organizando-os usando o código WaypointCircuit do Unity que ele traz e é
muito útil porque, antes de tudo, fornece a visualização de como será o seu
circuito na cena e
permite reorganizar esses pontos de referência. Usando este método, você notará que o tanque não
se atém à linha amarela. A linha amarela, neste caso,
é apenas um guia para saber onde está o circuito e qual waypoint está conectado a
qual outro waypoint.
Agora vamos colocar o WaypointProgressTracker em jogo.
Portanto, este é o outro script criado pelo Unity que vem em Utilitários. Vai ser anexado ao nosso tanque.
Selecione o tanque na Hierarquia e remova o script WaypointFollow que criamos. Em seguida, no Inspetor, você
deseja arrastar e soltar o WaypointProgressTracker.
Agora, esse rastreador de progresso que você verá também requer um circuito de waypoints e
você pode fornecer o circuito que criamos logo antes.
A outra coisa que também tem no fundo é um alvo.
O alvo será um objeto que é filho do tanque.
Portanto, selecione o tanque, clique com
o botão direito do mouse (em Hierarquia) em Objeto 3D> Cubo.
Pegue esse cubo e afaste-o um pouco do tanque - você pode vê-lo lá.
O cubo se tornará uma meta para o nosso tanque
viajar e o cubo permanecerá no circuito e será empurrado pelo
circuito pelo código WaypointProgressTracker e o tanque o seguirá.
Portanto, o cubo em si nem precisa ser visível e, mais tarde, quando você o coloca em produção,
não é visível.
Antes de tudo, basta desligar o colisor de caixas, porque você não precisa de nenhuma física estranha
que ocorra neste sistema.
Agora selecione o tanque pai e arraste e solte seu pequeno cubo no alvo.
Certo, neste momento, vamos pressionar Play e ver o que acontece.
Tudo certo.
Então você pode ver que você tem o cubo e ele está sendo movido. Está sentado no circuito.
Há essa linha verde entre o tanque e
o cubo e também há essa bola aqui no circuito.
Agora, todos esses valores são controlados no script WaypointProgressTracker anexado ao tanque.
Basicamente, o que eles estão fazendo é criar um pequeno elástico entre nosso cubo e nosso tanque, de modo
que o cubo não fique muito longe do tanque enquanto estiver no circuito.
Se eu aproximar meu tanque do cubo
e começar a subir
por trás dele, você verá que o cubo percorre o circuito.
Esse é o rastreador
de progresso que move o cubo para nós, automaticamente.
Agora você não quer jogar seu jogo arrastando o tanque pela visualização de cena!
Então, queremos programá-lo para seguir automaticamente o cubo e já criamos esse
código. Se você se lembra de quando o zumbi seguia o cubo acionável, criamos um
script chamado MoveLocal?
É exatamente o mesmo script que agora precisamos colocar no tanque e dizer que nosso objetivo
será o cubo.
Então, eu criei esse script em um arquivo chamado FollowGoal.
Além da mudança de nome para FollowGoal, há realmente apenas uma outra linha de código que foi modificada.
Ainda temos nosso 'objetivo público' de atravessarmos aqui e agora, em vez de ser
um cubo acionável, será aquele cubo que está sendo acionado pelo circuito.
Ainda temos nossa velocidade, precisão e rotação, como tínhamos antes.
Na verdade, nem estamos usando precisão neste caso, para que você possa tirar isso. No LateUpdate é onde todo o
trabalho acontece, por isso ainda queremos fazer um lookAtGoal.
Então, definimos nossa direção, como antes. Nós giramos lentamente nessa direção e empurramos nosso personagem
para frente.
Observe que agora a verificação de precisão 'if' passou, porque não queremos que nosso tanque pare quando ele se aproxima desse cubo, porque se parar,
o cubo para e você não quer isso, apenas deseja que o cubo continue
se movendo pelo circuito e pelo tanque para continuar seguindo.
Portanto, salve isso e volte para o Unity, selecione o tanque, agarre esse novo código FollowGoal, arraste e
solte-o no tanque no Inspector, para que você tenha o WaypointProgressTracker e
também o seu FollowGoal .
Para a variável de meta exposta, você deseja adicionar seu objeto de cubo; arraste-o e solte-o no 'Objetivo'.
Agora, quando você pressiona Play e verá que eu já alinhei meu cubo pronto para ir para o ponto 1 e meu tanque logo
atrás dele.
Claro que você pode ter esses em qualquer lugar.
Vamos pressionar play
e agora o cubo começará a calcular sua trajetória ao longo do circuito e você
pode ver que o tanque está se movendo.
A outra coisa que você encontrará é por causa da maneira como este tanque segue o
cubo com a velocidade e a rotação, é que ele pode cortar cantos ... porque o tanque está tentando ir direto para o cubo.
Realmente não tem conhecimento e não se importa com seus pontos de referência.
Então o cubo está agindo como um pequeno guia.
Agora, se você deseja modificar a distância que o cubo pode chegar e a rapidez com que ele
percorre as esquinas, você pode alterar
no WaypointProgressTracker até que ponto ele 'olhará para a frente' e até que ponto a velocidade para 'olhar à frente' será bem.
Você também pode modificar um limite de ponto a ponto, e esse limite é o quão perto queremos que
o próprio cubo chegue a cada um deles antes de
considerar visitá-los e essa é essencialmente a nossa precisão.
E esse é o script do waypoint que acompanha o Unity.
Sinta-se à vontade para usá-lo juntos (o circuito e o rastreador) ou usar um deles com o seu código,
como quiser.
Todos estão fazendo a mesma coisa. Nosso código é realmente bastante simples, porque estamos apenas pressionando um A. EU. avançar pelo circuito e,
portanto, você pode
preferir usá-lo porque o escreveu e pode modificá-lo de acordo com seu próprio entendimento.