Menu
CoddyTech

Feuern

Lektion 9 von 18 im Kurs Unity-Spiel: Tower Defense von Coddy.

Ein Turm feuert fireRate-mal pro Sekunde auf sein Ziel. Statt eines Timers, der herunterzählt, merkt sich der Turm den Zeitpunkt seines nächsten Schusses: Sobald Time.time diesen erreicht hat, feuert der Turm und setzt den Zeitpunkt um 1f / fireRate Sekunden nach vorne. Ein Rasensprenger, der zweimal pro Sekunde sprüht:

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

Jeder Schuss ist ein Projectile, das mit MoveTowards zu seinem Ziel fliegt, ihm folgt, während es läuft, und ihm bei der Ankunft Schaden zufügt. Es muss nicht wissen, dass es einen Enemy getroffen hat: Es fragt das Ziel nach IDamageable, der Schnittstelle für alles, was Schaden erleiden kann, wie im Kapitel „Schnittstellen“. Deshalb kann auf alles geschossen werden, was diese Schnittstelle implementiert.

Ein Ziel kann sterben, während ein Schuss in der Luft ist, etwa weil es von einem Schuss eines anderen Turms getroffen wird. target des Schusses ist dann gleich null, wie bei jedem zerstörten Unity-Objekt, und der Schuss hat kein Ziel mehr, zu dem er fliegen kann, also zerstört er sich selbst.

challenge icon

Aufgabe

Mittel
  1. IDamageable deklariert void TakeDamage(int amount). Lass Enemy diese Schnittstelle implementieren: Der Betrag wird von der Gesundheit abgezogen, und bei 0 oder weniger wird der Gegner zerstört.
  2. Füge in Projectile einen serialisierten Float-Wert speed (das Prefab legt ihn auf 12 fest) und public void Launch(Transform target, int damage) hinzu, der beide Werte speichert. Fliege in Update mit speed auf das Ziel zu; bei der Ankunft rufe TakeDamage(damage) für dessen IDamageable auf und zerstöre das Projektil. Wenn das Ziel nicht mehr vorhanden ist, zerstöre das Projektil.
  3. Füge in Tower einen öffentlichen int-Wert damage, einen öffentlichen Float-Wert fireRate (Schüsse pro Sekunde) und ein serialisiertes projectilePrefab (ein Projectile) hinzu. Solange der Turm ein Ziel hat, schieße höchstens fireRate-mal pro Sekunde: Instanziiere das Projektil ein wenig vor dem Kopf, bei head.position + head.forward * 0.6f, und schicke es mit dem Schaden des Turms auf das Ziel.

Das ArrowTower-Prefab legt den Schaden auf 2 und fireRate auf 1.5 fest; sein Projektil ist ArrowShot. Drücke Play, baue Türme und halte die erste Welle auf, dann Check.

Probier es selbst

using UnityEngine;

// Kommt später: ein Geschoss, das von einem Turm zu seinem Ziel fliegt.
public class Projectile : MonoBehaviour
{
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Unity-Spiel: Tower Defense