Menu
CoddyTech

Todeszonen

Teil des Abschnitts Physik und Gameplay der Unity-Journey von Coddy. Lektion 19 von 71.

Eine Todeszone ist ein Trigger über einem Bereich, den der Spieler nicht erreichen darf: Lava, Stacheln oder der leere Raum unter dem Level. Betritt der Spieler sie, wird er zu einem Spawnpunkt zurückgebracht. Hier übernimmt das Skript der Lava diese Aufgabe. Der Spawnpunkt befindet sich in einem Transform-Feld, das im Inspector festgelegt wird:

public Transform spawnPoint;

void OnTriggerEnter(Collider other)
{
    if (other.CompareTag("Player"))
    {
        other.transform.position = spawnPoint.position;
        other.attachedRigidbody.linearVelocity = Vector3.zero;
    }
}

other.attachedRigidbody ist der Rigidbody, zu dem der eintretende Collider gehört. Durch das Festlegen von transform.position wird der Spieler teleportiert – genau das braucht man beim Respawnen. Ein Rigidbody behält seine Geschwindigkeit beim Sprung jedoch bei: Ein Spieler, der mit 10 Einheiten pro Sekunde hineingefallen ist, kommt am Spawnpunkt immer noch mit 10 Einheiten pro Sekunde fallend an, und einer, der in die Lava gerannt ist, rennt weiter und direkt wieder hinein. Wird linearVelocity auf Vector3.zero gesetzt, kommt er im Stillstand an. Durch die Tag-Prüfung bleiben alle anderen, die in die Lava fallen, an Ort und Stelle.

challenge icon

Aufgabe

Einfach

Sorge dafür, dass der Spieler wieder erscheint. Dieses Skript befindet sich am Spieler, daher bewegt es transform und body, nicht other.

  1. Setze in Start() das Feld Vector3 respawn auf transform.position.
  2. Setze in OnTriggerEnter(Collider other), wenn other.CompareTag("Checkpoint"), respawn = transform.position;.
  3. Setze bei other.CompareTag("KillZone") transform.position = respawn; und body.linearVelocity = Vector3.zero;.

Drücke „Spielen“ und geh von der Brücke. Drücke dann „Prüfen“.

Probier es selbst

using UnityEngine;

public class Player : MonoBehaviour
{
    public float force = 12f;
    Rigidbody body;
    Vector3 input;
    // respawn: der Ort, an dem der Spieler wieder erscheint

    void Start()
    {
        body = GetComponent<Rigidbody>();
    }

    void Update()
    {
        input = new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical"));
    }

    void FixedUpdate()
    {
        body.AddForce(input * force);
    }

    // Checkpoint: merkt sich, wo der Spieler ist. KillZone: zurück an diesen Ort, ohne sich zu bewegen.
}

Alle Lektionen in Physik und Gameplay

Übe selbstständig: Unity-Playground