Menu
CoddyTech

Disparar

Lección 9 de 18 del curso Juego de Unity: defensa de torres de Coddy.

Una torre dispara a su objetivo fireRate veces por segundo. En lugar de usar un temporizador que cuenta hacia atrás, la torre guarda la hora de su próximo disparo: cuando Time.time la alcanza, la torre dispara y la adelanta 1f / fireRate segundos. Un aspersor que rocía dos veces por segundo:

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

Cada disparo es un Projectile que vuela hacia su objetivo con MoveTowards, siguiéndolo mientras camina, y lo daña al llegar. No necesita saber que ha alcanzado a un Enemy: le solicita al objetivo IDamageable, la interfaz para cualquier cosa que pueda recibir daño, como en el capítulo sobre interfaces, así que se puede disparar a cualquier cosa que la implemente.

Un objetivo puede morir mientras un disparo está en el aire, abatido por el disparo de otra torre. Entonces, el target del disparo es igual a null, como ocurre con todo objeto de Unity destruido, y el disparo ya no tiene adónde volar, así que se destruye.

challenge icon

Desafío

Intermedio
  1. IDamageable declara void TakeDamage(int amount). Haz que Enemy lo implemente: la cantidad se resta de su salud y, cuando llega a 0 o menos, se destruye al enemigo.
  2. En Projectile, añade un float serializado speed (el prefab establece 12) y public void Launch(Transform target, int damage), que guarda ambos. En Update, vuela hacia el objetivo a speed; al llegar, llama a TakeDamage(damage) en su IDamageable y destruye el proyectil. Cuando el objetivo ya no esté, destruye el proyectil.
  3. En Tower, añade un int público damage, un float público fireRate (disparos por segundo) y un projectilePrefab serializado (un Projectile). Mientras la torre tenga un objetivo, dispara como máximo fireRate veces por segundo: instancia el proyectil un poco por delante de la cabeza, en head.position + head.forward * 0.6f, y lánzalo al objetivo con el daño de la torre.

El prefab ArrowTower establece un daño de 2 y un fireRate de 1.5, y su proyectil es ArrowShot. Pulsa Play, construye torres y detén la primera oleada; después, pulsa Check.

Pruébalo tú mismo

using UnityEngine;

// Se añadirá más adelante: un proyectil que vuela desde una torre hasta su objetivo.
public class Projectile : MonoBehaviour
{
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Juego de Unity: defensa de torres