Pontos de passagem
Lição 1 de 18 do curso Jogo de Unity: Defesa de Torres da Coddy.
Neste curso, você vai criar um jogo de defesa de torre. Os inimigos avançam em ondas por um caminho em direção à sua base, e você os detém com torres que posiciona em plataformas de construção, depois aprimora e vende. Cada lição adiciona um recurso. Todos os doze scripts do jogo estão no projeto desde o início; a maioria são stubs curtos que as lições posteriores completam.
Um inimigo segue o caminho por meio de waypoints: GameObjects vazios nos cantos, em um array na ordem em que são percorridos. O inimigo mantém o índice do waypoint para o qual está indo, move-se em direção a ele e, ao chegar, segue para o próximo. Vector3.MoveTowards(current, target, maxStep) move um ponto em direção a um alvo em, no máximo, maxStep e nunca além dele, então o inimigo chega exatamente ao waypoint e == pode detectar que ele chegou. Este drone de patrulha voa entre seus postos e recomeça depois do último:
public Transform[] posts;
public float speed = 3f;
private int current;
void Update()
{
Vector3 goal = posts[current].position;
transform.position = Vector3.MoveTowards(transform.position, goal, speed * Time.deltaTime);
if (transform.position == goal)
{
current = (current + 1) % posts.Length;
}
}Um inimigo não percorre o caminho em loop: depois do último waypoint, não há mais para onde ir. Quando o índice chega a Length, ele deixa de apontar para um waypoint, e ler waypoints[waypoints.Length] gera uma exceção IndexOutOfRangeException, então o índice é verificado antes de ser usado. Os waypoints ficam 0.6 acima do chão, a altura do centro de um inimigo, então caminhar em linha reta até eles mantém seus pés no chão.
Desafio
FácilO Grunt fica no primeiro ponto de passagem, WP0, e seu script Enemy já tem os oito pontos de passagem em waypoints, de WP0 no ponto de surgimento até WP7 na base.
- Adicione um int privado
next: o índice do ponto de passagem para o qual o Grunt se dirige. Ele começa em WP0, entãonextcomeça em 1. - Em
Update, mova o Grunt em direção awaypoints[next]aspeedunidades por segundo comVector3.MoveTowards. - Quando ele chegar a esse ponto de passagem, siga para o próximo.
- Depois do último ponto de passagem, pare: não se mova mais e não ocorram erros.
Pressione Play e observe o Grunt percorrer o caminho; depois, Check.
Experimente você mesmo
using UnityEngine;
public class Enemy : MonoBehaviour
{
public float speed = 2f;
public Transform[] waypoints;
void Update()
{
// Percorra o caminho aqui: de um ponto de passagem ao próximo, em ordem.
}
}
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.