Menu
CoddyTech

Rückblick: Modularer Geschützturm

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

challenge icon

Aufgabe

Einfach

Baue die beiden Geschütztürme des Testgeländes aus Teilen. TurretControl.cs dreht jeden Geschützturm bereits mit den Pfeiltasten nach links und rechts, und Shell.cs lässt eine Granate nach vorne fliegen. Die Szene weist Turret1 eine Cannon und eine Ammo mit 4 Granaten sowie Turret2 eine TwinCannon und eine Ammo mit 3 Granaten zu. Schreibe die Teile:

  • Ammo: ein öffentliches int shells und eine öffentliche Methode bool Take(). Wenn noch eine Granate übrig ist, verbraucht sie eine und gibt true zurück. Wenn keine mehr übrig ist, gibt sie den Namen des Objekts und is empty aus, zum Beispiel Turret2 is empty, und gibt false zurück.
  • Weapon: eine abstrakte Komponente, die immer mit einer Ammo-Komponente ausgestattet ist, mit einem öffentlichen shellPrefab (ein GameObject), einem öffentlichen float cooldown (der Inspector legt den Wert auf 1 fest) und einer öffentlichen Methode Pull(). Ein Abfeuern während der Abklingzeit bewirkt nichts und verbraucht keine Granate. Andernfalls startet die Abklingzeit, wenn Take() eine Granate liefert, und Fire() wird ausgeführt – eine abstrakte Methode, die jede Waffe selbst implementiert.
  • Cannon feuert eine Granate von 1 Einheit vor dem Geschützturm ab. TwinCannon feuert mit einer Granate zwei Granaten ab: eine von 0.4 links und eine von 0.4 rechts von diesem Punkt. Eine Granate startet bei transform.position + transform.rotation * offset und ist wie der Geschützturm ausgerichtet (transform.rotation); offset ist dabei der vom Geschützturm aus gesehene Punkt, zum Beispiel new Vector3(0f, 0f, 1f).
  • In TurretControl löst die Leertaste den Abzug der Waffe aus, die der Geschützturm gerade hat.

Drücke Spielen, drehe die Geschütztürme und feuere, bis beide leer sind, und klicke dann auf Überprüfen.

Probier es selbst

using UnityEngine;

// Was alle Turmwaffen gemeinsam haben.
public class Weapon : MonoBehaviour
{
}

Alle Lektionen in Spielarchitektur in Unity