Escape Room
Teil des Abschnitts Physik und Gameplay der Unity-Journey von Coddy. Lektion 63 von 63.
Ein Escape Room mit einem Codeschloss. Drei graue Druckplatten liegen auf dem Boden, und die Tür in der Nordwand öffnet sich nur, wenn der Spieler in der richtigen Reihenfolge auf sie tritt: Platte 1, Platte 2, Platte 3. Nichts im Raum verrät, welche Platte welche ist. Eine falsche Platte setzt den Code zurück und lässt jede Platte eine Sekunde lang rot aufblinken. Die offene Tür bleibt einige Sekunden lang offen und schließt sich dann wieder, aber niemals, während sich der Spieler darin befindet: Solange der Spieler in der Türöffnung steht, wartet sie.
Das Skript Player ist fertig: Die Pfeiltasten bewegen den Spieler, der mit Player markiert ist und sich auf dem Player-Layer befindet. Schreibe zwei Skripte: Plate für jede Platte und CodeLock für das Schloss.
Aufgabe
SchwerPlate auf jeder Platte (einem Trigger). Weise ihr im Inspector number (1, 2 oder 3) und codeLock (das CodeLock-Skript des Locks) zu.
- Wenn der Spieler (mit dem Tag
Player) auf die Platte tritt, rufecodeLock.Press(number)auf. Alles andere, was darauf landet, bewirkt nichts.
CodeLock auf dem Lock. Weise ihm im Inspector plates (die Renderer der drei Platten, der Reihe nach), door (die Door), doorway (einen Punkt in der Mitte des Türdurchgangs) und openTime (4) zu.
- Eine öffentliche Methode
Press(int number). Wennnumberder Platte entspricht, die der Code als Nächstes erwartet (1, dann 2, dann 3), gib sie aus, zum Beispiel alsPlate 2. Wenn es sich dabei um Platte 3 handelte, gib außerdemUnlockedaus, beginne den Code wieder bei Platte 1 und starte eine Coroutine, die die Tür öffnet. - Bei jeder anderen Platte wird
Wrong plateausgegeben, der Code wieder bei Platte 1 begonnen und eine Coroutine gestartet, die jede Platte 1 Sekunde lang rot (Color.red) färbt und sie dann wieder grau (Color.gray) färbt. - Die Tür-Coroutine deaktiviert die Tür und wartet
openTimeSekunden. Anschließend wartet sie weiterhin frameweise, solange sich etwas auf dem Player-Layer innerhalb von 1 Einheit vondoorwaybefindet. Zuletzt aktiviert sie die Tür wieder und gibtDoor closedaus.
Drücke Play, finde die Reihenfolge und komm hinaus, dann klicke auf Check.
Probier es selbst
using System.Collections;
using UnityEngine;
public class CodeLock : MonoBehaviour
{
[SerializeField] private Renderer[] plates;
[SerializeField] private GameObject door;
[SerializeField] private Transform doorway;
[SerializeField] private float openTime = 4f;
public void Press(int number)
{
// Prüfe den Code; lasse die Platten bei einer falschen Eingabe aufblinken; öffne die Tür nach Platte 3
}
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Physik und Gameplay
1Rigidbody
Schwerkraft und MasseMit AddForce schiebenMit einem Impuls springenFixedUpdate für PhysikGeschwindigkeitKinematische KörperRückblick: Startrampe2Kollisionen
OnCollisionEnterWas habe ich getroffen?Beim Aufprall zerbrechenAuf dem Boden stehenAbprallen und ReibungCollider-FormenRückblick: Zerstörbare Wand