Menu
CoddyTech

Tower Defense Lite

Teil des Abschnitts Spielarchitektur in Unity der Unity-Journey von Coddy. Lektion 48 von 50.

Creeps marschieren die Straße entlang auf deine Basis zu, und ein einzelner Turm bewacht sie. Der Turm schießt Bolzen auf den nächstgelegenen Creep, solange er sich in Reichweite befindet, und jeder Creep, den er zur Strecke bringt, bringt Gold ein. Mit der Leertaste gibst du das Gold für die nächste Stufe des Turms aus: Jede Stufe reicht weiter, schießt schneller oder trifft härter. Ein Creep, der die Basis erreicht, kommt durch. Die Stufen sind Spieldaten, die ein Designer in einem Asset anpasst, ohne den Code anzufassen. Da der Turm viele Bolzen abfeuert, verwendet er sie aus einem Pool wieder, anstatt für jeden Schuss einen neuen zu erstellen und zu zerstören.

Schreibe zwei Skripte: TowerData, den Asset-Typ, und Tower. Creep, Bolt und CreepSpawner sind bereits fertig.

challenge icon

Aufgabe

Schwer

Der Inspector stellt Tower data (das Arrow-Asset), boltPrefab und infoText bereit. Lies die Leertaste über Keyboard.current des Input Systems aus.

  • In TowerData.cs: eine Klasse TowerLevel, die der Inspector anzeigen kann, mit public float range, public float fireEvery, public int damage und public int cost (dem Preis für das Erreichen dieses Levels), sowie TowerData, ein ScriptableObject mit einem Eintrag im Create-Menü und einer public List<TowerLevel> levels. Das Arrow-Asset enthält drei Level: Reichweite 4, alle 1 s, Schaden 1, Kosten 0; Reichweite 5, alle 0.6 s, Schaden 1, Kosten 6; Reichweite 6, alle 0.4 s, Schaden 2, Kosten 12.
  • Der Turm startet auf dem ersten Level mit 0 Gold, und infoText zeigt beides als Level 1, 0 gold an, wann immer sich etwas davon ändert.
  • Wenn die Sekunden von fireEvery des Levels seit dem letzten Schuss vergangen sind und sich ein Creep in Reichweite befindet (der Collider eines Creeps innerhalb von range um den Turm, wie von Physics.OverlapSphere ermittelt), schießt der Turm auf den nächstgelegenen Creep. Er nimmt einen Bolzen aus einem ObjectPool<Bolt>, platziert ihn am Turm und ruft bolt.Launch(creep, damage, pool.Release) auf: Der Bolzen ruft dieses letzte Argument auf, wenn er fertig ist, und gibt sich damit an den Pool zurück. Ein Bolzen wird deaktiviert, während er im Pool wartet, und aktiviert, wenn er entnommen wird.
  • Jeder Creep, der stirbt, bringt sein bounty in Gold ein: Abonniere das statische Ereignis Creep.Killed.
  • Mit der Leertaste kaufst du das nächste Level, sofern es eines gibt und dein Gold dafür ausreicht: Die Kosten werden vom Gold abgezogen, und der Turm steigt ein Level auf und protokolliert dies als Tower level 2. Andernfalls bewirkt die Leertaste nichts.

Drücke Play, halte die Straße und verbessere den Turm, dann drücke Check.

Probier es selbst

using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.Pool;
using TMPro;

public class Tower : MonoBehaviour
{
    [SerializeField] private TowerData data;
    [SerializeField] private Bolt boltPrefab;
    [SerializeField] private TMP_Text infoText;

    private int level;
    private int gold;
}
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 Spielarchitektur in Unity