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.
Desafio
MédioIDamageabledeclaravoid TakeDamage(int amount). FaçaEnemyimplementá-la: o valor é subtraído da vida, e com 0 ou menos o inimigo é destruído.- Em
Projectile, adicione umspeedfloat serializado (o prefab define 12) epublic void Launch(Transform target, int damage), que armazena ambos. EmUpdate, voe em direção ao alvo aspeed; ao chegar, chameTakeDamage(damage)no IDamageable dele e destrua o projétil. Quando o alvo desaparecer, destrua o projétil. - Em
Tower, adicione um int públicodamage, um float públicofireRate(disparos por segundo) e umprojectilePrefabserializado (um Projectile). Enquanto a torre tiver um alvo, dispare no máximofireRatevezes por segundo: instancie o projétil um pouco à frente da cabeça, emhead.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
{
}
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.