Menu
CoddyTech

Bauflächen

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

Der Spieler baut Türme, indem er auf die Bauplattformen klickt, die grauen Quadrate neben dem Pfad. Ein Klick findet auf dem Bildschirm in Pixeln statt, während sich die Plattformen in der 3D-Welt befinden. Daher wird der Klick zu einem Strahl. Camera.main.ScreenPointToRay(point) gibt den Strahl zurück, der an der Kamera beginnt und durch diesen Bildschirmpunkt in die Szene verläuft. Physics.Raycast folgt ihm und meldet den ersten Collider, auf den er trifft: den, den der Spieler unter der Maus sieht. Ein Malwerkzeug, das den angeklickten Block einfärbt:

void Update()
{
    if (!Mouse.current.leftButton.wasPressedThisFrame)
    {
        return;
    }

    Ray ray = Camera.main.ScreenPointToRay(Mouse.current.position.ReadValue());
    if (Physics.Raycast(ray, out RaycastHit hit) && hit.collider.TryGetComponent(out Paintable block))
    {
        block.Paint(brushColor);
    }
}

Die zweite Hälfte von && wird nur ausgeführt, wenn der Strahl etwas getroffen hat, also ist hit ausgefüllt. TryGetComponent fragt dann, ob das getroffene Objekt eines ist, das dich interessiert: Der Strahl trifft auch den Boden, den Pfad und die Bäume, die kein Paintable haben, sodass diese Klicks nichts bewirken.

Jede Szene hier verwendet ausschließlich das Input System von Unity 6, daher liest Mouse.current die Maus aus. Ihre Position wird in Bildschirmpixeln angegeben, genau das erwartet ScreenPointToRay.

challenge icon

Aufgabe

Mittel

Die Bauflächen haben ein BuildPad-Skript, und das Game-Objekt hat einen BuildManager, dessen towerPrefab das ArrowTower-Prefab ist.

  1. Füge in BuildPad.cs ein öffentliches Feld tower vom Typ Tower hinzu: der auf dieser Baufläche gebaute Turm oder null.
  2. Füge in BuildManager ein serialisiertes privates Feld towerPrefab (ein Tower) hinzu. Wenn in diesem Frame die linke Maustaste gedrückt wird, lässt du in Update einen Strahl von der Kamera durch die Mausposition verlaufen.
  3. Wenn der Strahl einen Collider trifft, der ein BuildPad hat, und auf dieser Baufläche noch kein Turm steht, instanziiere towerPrefab an der Position der Baufläche und speichere den neuen Turm in tower der Baufläche. Eine Baufläche mit einem Turm oder etwas, das keine Baufläche ist, bewirkt nichts.

Drücke Play und klicke auf einige Bauflächen, dann auf Check.

Probier es selbst

using UnityEngine;

// Kommt später: Bauplätze anklicken, um Türme zu platzieren, sowie der Shop und das Turm-Panel.
public class BuildManager : 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