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.
Sfida
MedioIDamageabledichiaravoid TakeDamage(int amount). Fai implementare l'interfaccia aEnemy: il valore indicato viene sottratto alla sua salute e, quando arriva a 0 o meno, il nemico viene distrutto.- In
Projectile, aggiungi un float serializzatospeed(il prefab imposta 12) epublic void Launch(Transform target, int damage), che memorizza entrambi. InUpdate, fai muovere il proiettile verso il bersaglio a una velocità pari aspeed; quando lo raggiunge, chiamaTakeDamage(damage)sul suo IDamageable e distruggi il proiettile. Se il bersaglio non c'è più, distruggi il proiettile. - In
Tower, aggiungi un int pubblicodamage, un float pubblicofireRate(colpi al secondo) e unprojectilePrefabserializzato (un Projectile). Finché la torre ha un bersaglio, spara al massimofireRatevolte al secondo: istanzia il proiettile un po' davanti alla testa, inhead.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
{
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.