Pokój zagadek
Część sekcji Fizyka i rozgrywka ścieżki Unity w Coddy. Lekcja 63 z 63.
Pokój zagadek z zamkiem szyfrowym. Na podłodze leżą trzy szare płyty naciskowe, a drzwi w północnej ścianie otwierają się tylko wtedy, gdy gracz stanie na nich we właściwej kolejności: płyta 1, płyta 2, płyta 3. W pokoju nie ma żadnej wskazówki, która płyta jest którą. Nadepnięcie na niewłaściwą płytę rozpoczyna kod od nowa i sprawia, że każda płyta miga na czerwono przez sekundę. Otwarte drzwi pozostają otwarte przez kilka sekund, a potem znów się zamykają, ale nigdy na graczu: gdy gracz stoi w przejściu, drzwi czekają.
Skrypt Player jest gotowy: strzałki poruszają graczem, który ma tag Player i znajduje się na warstwie Player. Napisz dwa skrypty: Plate dla każdej płyty i CodeLock dla zamka.
Wyzwanie
TrudnyPlate, na każdej płycie (wyzwalaczu). W Inspectorze przypisz jej number (1, 2 lub 3) i codeLock (skrypt CodeLock zamka).
- Gdy gracz (z tagiem
Player) wejdzie na płytę, wywołajcodeLock.Press(number). Wszystko inne, co na nią wejdzie, nie wywoła żadnego działania.
CodeLock, na zamku. W Inspectorze przypisz mu plates (Renderery trzech płyt, w odpowiedniej kolejności), door (drzwi), doorway (punkt na środku przejścia) oraz openTime (4).
- Metoda publiczna
Press(int number). Gdynumberwskazuje płytę, której kod oczekuje w następnej kolejności (1, potem 2, a następnie 3), wyświetl jej numer, np.Plate 2. Gdy była to płyta 3, wyświetl teżUnlocked, rozpocznij kod od płyty 1 i uruchom korutynę otwierającą drzwi. - Każda inna płyta powoduje wyświetlenie
Wrong plate, rozpoczęcie kodu od płyty 1 oraz uruchomienie korutyny, która zmienia kolor wszystkich płyt na czerwony (Color.red) na 1 sekundę, a następnie z powrotem na szary (Color.gray). - Korutyna drzwi dezaktywuje je i czeka
openTimesekund. Następnie nadal czeka, klatka po klatce, dopóki cokolwiek na warstwie Player znajduje się w odległości do 1 jednostki oddoorway. Na koniec ponownie aktywuje drzwi i wyświetlaDoor closed.
Naciśnij Play, znajdź właściwą kolejność i wydostań się, a następnie naciśnij Check.
Spróbuj swoich sił
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)
{
// sprawdź kod; mignij płytkami przy błędnym kodzie; otwórz drzwi po płytce 3
}
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Fizyka i rozgrywka
1Ciało sztywne
Grawitacja i masaPopychanie za pomocą AddForceSkok z impulsemFixedUpdate dla fizykiPrędkośćCiała kinematycznePowtórka: platforma startowa2Kolizje
OnCollisionEnterW co uderzyłem?Rozbijanie przy zderzeniuStanie na podłożuOdbicie i tarcieKształty colliderówPodsumowanie: Zniszczalny mur