Menu
CoddyTech

Spara

Lezione 9 di 18 del corso Gioco Unity: difesa della torre di Coddy.

Una torre spara al suo bersaglio fireRate volte al secondo. Invece di usare un timer che fa il conto alla rovescia, la torre tiene traccia del momento del prossimo colpo: quando Time.time lo raggiunge, la torre spara e lo sposta in avanti di 1f / fireRate secondi. Un irrigatore che spruzza due volte al secondo:

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

Ogni colpo è un Projectile che vola verso il suo bersaglio con MoveTowards, seguendolo mentre cammina, e lo ferisce quando arriva. Non ha bisogno di sapere di aver colpito un nemico: chiede al bersaglio IDamageable, l’interfaccia per qualsiasi cosa possa subire danni, come nel capitolo sulle interfacce, così può sparare a qualsiasi cosa la implementi.

Un bersaglio può morire mentre un colpo è in volo, abbattuto dal colpo di un’altra torre. A quel punto, il target del colpo risulta uguale a null, come accade per ogni oggetto Unity distrutto, e il colpo non ha più nulla da raggiungere, quindi si autodistrugge.

challenge icon

Sfida

Medio
  1. IDamageable dichiara void TakeDamage(int amount). Fai implementare l'interfaccia a Enemy: il valore indicato viene sottratto alla sua salute e, quando arriva a 0 o meno, il nemico viene distrutto.
  2. In Projectile, aggiungi un float serializzato speed (il prefab imposta 12) e public void Launch(Transform target, int damage), che memorizza entrambi. In Update, fai muovere il proiettile verso il bersaglio a una velocità pari a speed; quando lo raggiunge, chiama TakeDamage(damage) sul suo IDamageable e distruggi il proiettile. Se il bersaglio non c'è più, distruggi il proiettile.
  3. In Tower, aggiungi un int pubblico damage, un float pubblico fireRate (colpi al secondo) e un projectilePrefab serializzato (un Projectile). Finché la torre ha un bersaglio, spara al massimo fireRate volte al secondo: istanzia il proiettile un po' davanti alla testa, in head.position + head.forward * 0.6f, e lancialo verso il bersaglio con il danno della torre.

Il prefab ArrowTower imposta un danno di 2 e un fireRate di 1.5, e il suo proiettile è ArrowShot. Premi Play, costruisci torri e ferma la prima ondata, poi premi Check.

Provalo tu

using UnityEngine;

// Arriverà più avanti: un proiettile che vola da una torre verso il suo bersaglio.
public class Projectile : MonoBehaviour
{
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Gioco Unity: difesa della torre