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.
Aufgabe
EinfachSorge dafür, dass der Spieler wieder erscheint. Dieses Skript befindet sich am Spieler, daher bewegt es transform und body, nicht other.
- Setze in
Start()das FeldVector3 respawnauftransform.position. - Setze in
OnTriggerEnter(Collider other), wennother.CompareTag("Checkpoint"),respawn = transform.position;. - Setze bei
other.CompareTag("KillZone")transform.position = respawn;undbody.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
1Rigidbody
Schwerkraft und MasseMit AddForce schiebenMit einem Impuls springenFixedUpdate für PhysikGeschwindigkeitKinematische KörperRückblick: Startrampe4Coroutinen
AufrufenWiederholt aufrufen, Aufruf abbrechenDeine erste CoroutineSchleifen in CoroutinenCoroutinen beendenRückblick: Countdown10Projekt: Arena-Flucht
Die ArenaJäger2Kollisionen
OnCollisionEnterWas habe ich getroffen?Beim Aufprall zerbrechenAuf dem Boden stehenAbprallen und ReibungCollider-FormenRückblick: Zerstörbare Wand5Projekt: Münzrausch
Der rollende BallMünzen zum Einsammeln11Abschließende Herausforderungen
KanonenreichweiteBewegliche ZieleMurmelgolfIns LochEscape RoomDie TürÜbe selbstständig: Unity-Playground