Menu
CoddyTech

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;
}
challenge icon

Aufgabe

Mittel

Türme schießen einmal pro Sekunde Pfeile ab.

  1. Enemy implementiert IDamageable: TakeDamage(int amount) zieht den Wert von health ab und zerstört den Gegner bei 0 oder weniger.
  2. Projectile: Launch(Transform target, int damage) speichert beides; Update fliegt mit speed zum Ziel, ruft bei der Ankunft TakeDamage(damage) auf und zerstört sich selbst, ebenso wenn das Ziel nicht mehr vorhanden ist.
  3. Tower: Füge public int damage = 2; und [SerializeField] private Projectile projectilePrefab; hinzu; feuere wie oben von transform.position + Vector3.up aus.

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