Schießen
Lektion 9 von 25 im Kurs Unity-Spiel: Tower Defense von Coddy.
Ein Turm feuert ein Projectile auf sein Ziel. Der Schuss fliegt mit MoveTowards dorthin, folgt dem Ziel, während es läuft, und fügt ihm bei seiner Ankunft Schaden zu. Er muss nicht wissen, dass er einen Enemy getroffen hat: Er fragt nach IDamageable, der Schnittstelle für alles, was Schaden erleiden kann. So kann alles beschossen werden, was sie implementiert.
Ein Ziel kann sterben, während ein Schuss in der Luft ist. Ein zerstörtes Unity-Objekt wird mit null verglichen, daher prüft der Schuss zuerst target == null und zerstört sich selbst.
Vorerst feuert ein Turm einmal pro Sekunde. Er merkt sich den Zeitpunkt seines nächsten Schusses:
if (Time.time >= nextShot)
{
Fire();
nextShot = Time.time + 1f;
}Aufgabe
MittelTürme schießen einmal pro Sekunde Pfeile ab.
EnemyimplementiertIDamageable:TakeDamage(int amount)zieht den Wert vonhealthab und zerstört den Gegner bei 0 oder weniger.Projectile:Launch(Transform target, int damage)speichert beides;Updatefliegt mitspeedzum Ziel, ruft bei der AnkunftTakeDamage(damage)auf und zerstört sich selbst, ebenso wenn das Ziel nicht mehr vorhanden ist.Tower: Fügepublic int damage = 2;und[SerializeField] private Projectile projectilePrefab;hinzu; feuere wie oben vontransform.position + Vector3.upaus.
Drücke „Spielen“: Pfeile fliegen und Grunts fallen. Drücke dann „Prüfen“.
Probier es selbst
using UnityEngine;
// Kommt später: ein Schuss, der von einem Turm zu seinem Ziel fliegt.
public class Projectile : MonoBehaviour
{
}
Alle Lektionen in Unity-Spiel: Tower Defense
Übe selbstständig: Unity-Playground