Menu
CoddyTech

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.

challenge icon

Desafio

Fácil

O 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.

  1. Adicione um int privado next: o índice do ponto de passagem para o qual o Grunt se dirige. Ele começa em WP0, então next começa em 1.
  2. Em Update, mova o Grunt em direção a waypoints[next] a speed unidades por segundo com Vector3.MoveTowards.
  3. Quando ele chegar a esse ponto de passagem, siga para o próximo.
  4. 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.
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Jogo de Unity: Defesa de Torres