Menu
CoddyTech

Disparar

Lição 9 de 18 do curso Jogo de Unity: Defesa de Torres da Coddy.

Uma torre dispara contra seu alvo fireRate vezes por segundo. Em vez de um temporizador que faz uma contagem regressiva, a torre mantém o horário do próximo disparo: quando Time.time o alcança, a torre dispara e o adia em 1f / fireRate segundos. Um aspersor que borrifa duas vezes por segundo:

if (Time.time >= nextSpray)
{
    Spray();
    nextSpray = Time.time + 1f / spraysPerSecond;
}

Cada disparo é um Projétil que voa até o alvo usando MoveTowards, seguindo-o enquanto ele caminha, e causa dano ao chegar. Ele não precisa saber que atingiu um Enemy: solicita IDamageable ao alvo, a interface para qualquer coisa que possa receber dano, como no capítulo sobre Interfaces, então qualquer coisa que a implemente pode ser atingida.

Um alvo pode morrer enquanto um disparo está no ar, abatido pelo disparo de outra torre. Nesse caso, o target do disparo é igual a null, assim como acontece com todo objeto Unity destruído, e o disparo não tem mais para onde voar, então se destrói.

challenge icon

Desafio

Médio
  1. IDamageable declara void TakeDamage(int amount). Faça Enemy implementá-la: o valor é subtraído da vida, e com 0 ou menos o inimigo é destruído.
  2. Em Projectile, adicione um speed float serializado (o prefab define 12) e public void Launch(Transform target, int damage), que armazena ambos. Em Update, voe em direção ao alvo a speed; ao chegar, chame TakeDamage(damage) no IDamageable dele e destrua o projétil. Quando o alvo desaparecer, destrua o projétil.
  3. Em Tower, adicione um int público damage, um float público fireRate (disparos por segundo) e um projectilePrefab serializado (um Projectile). Enquanto a torre tiver um alvo, dispare no máximo fireRate vezes por segundo: instancie o projétil um pouco à frente da cabeça, em head.position + head.forward * 0.6f, e lance-o contra o alvo com o dano da torre.

O prefab ArrowTower define um dano de 2 e um fireRate de 1.5, e seu projétil é ArrowShot. Pressione Play, construa torres e detenha a primeira onda, depois Check.

Experimente você mesmo

using UnityEngine;

// Vem depois: um projétil que voa de uma torre até seu alvo.
public class Projectile : MonoBehaviour
{
}
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