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.
Aufgabe
SchwerDer 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 KlasseTowerLevel, die der Inspector anzeigen kann, mitpublic float range,public float fireEvery,public int damageundpublic int cost(dem Preis für das Erreichen dieses Levels), sowieTowerData, ein ScriptableObject mit einem Eintrag im Create-Menü und einerpublic 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
infoTextzeigt beides alsLevel 1, 0 goldan, wann immer sich etwas davon ändert. - Wenn die Sekunden von
fireEverydes Levels seit dem letzten Schuss vergangen sind und sich ein Creep in Reichweite befindet (der Collider eines Creeps innerhalb vonrangeum den Turm, wie vonPhysics.OverlapSphereermittelt), schießt der Turm auf den nächstgelegenen Creep. Er nimmt einen Bolzen aus einemObjectPool<Bolt>, platziert ihn am Turm und ruftbolt.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
bountyin Gold ein: Abonniere das statische EreignisCreep.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;
}
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
1Komponenten statt Hierarchien
Kleine KomponentenEin Basisskript für GegnerAbstrakte KomponentenKomponenten im ZusammenspielRückblick: Modularer Geschützturm4Serialisierte Daten
Serialisierbare KlassenListen im InspectorEnums im InspectorRückblick: Loot-Tabelle7Zustandsautomaten
Zustände als KlassenEin ZustandsautomatÜbergängeGegner-KIWiederholung: Türzustände10Projekt: Arena-Überlebenskampf
Der HeldGegnertypen2Interfaces in Unity
IDamageableInterfaces und TryGetComponentGetComponentsRückblick: Interaktionstaste5ScriptableObjects
Daten-AssetsWaffenwerteGemeinsame EinstellungenWellen als DatenRückblick: Item-Datenbank8Wiederverwendbarer Code
ErweiterungsmethodenEin generisches SingletonGenerische HilfsmethodenRückblick: FindNearest