Menu
CoddyTech

Комната побега

Часть раздела Физика и игровой процесс путешествия по Unity на Coddy. Урок 63 из 63.

Квест-комната с кодовым замком. На полу лежат три серые нажимные плиты, а дверь в северной стене открывается, только когда игрок наступает на них в правильном порядке: плита 1, плита 2, плита 3. В комнате ничто не подсказывает, где какая плита. Если наступить не на ту плиту, ввод кода начинается заново, и все плиты на секунду вспыхивают красным. Открытая дверь остается открытой несколько секунд, а затем снова закрывается, но никогда не захлопывается перед игроком: пока игрок стоит в дверном проеме, дверь ждет.

Скрипт Player готов: стрелки перемещают игрока, помеченного тегом Player и находящегося на слое Player. Напиши два скрипта: Plate для каждой плиты и CodeLock для замка.

challenge icon

Задание

Сложно

Plate — на каждой пластине (триггере). В Inspector укажи ей number (1, 2 или 3) и codeLock (скрипт CodeLock замка).

  • Когда игрок (с тегом Player) наступает на пластину, вызови codeLock.Press(number). Если на неё наступает что-то другое, ничего не происходит.

CodeLock — на замке. В Inspector укажи ему plates (рендереры трёх пластин по порядку), door (дверь), doorway (точку посередине дверного проёма) и openTime (4).

  • Публичный метод Press(int number). Если number — это номер пластины, которую код ожидает следующей (сначала 1, затем 2, потом 3), выведи его в лог, например Plate 2. Если это была пластина 3, также выведи в лог Unlocked, начни код заново с пластины 1 и запусти корутину, которая откроет дверь.
  • При нажатии на любую другую пластину выведи в лог Wrong plate, начни код заново с пластины 1 и запусти корутину, которая на 1 секунду окрасит все пластины в красный цвет (Color.red), а затем вернёт им серый цвет (Color.gray).
  • Корутина двери деактивирует её и ждёт openTime секунд. Затем она продолжает ждать по одному кадру, пока что-либо на слое Player находится в пределах 1 единицы от doorway. Наконец, она снова активирует дверь и выводит в лог Door closed.

Нажми Play, выясни порядок и выберись, затем нажми Check.

Попробуйте сами

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)
    {
        // проверь код; подсвети plates при неверном вводе; открой door после plates 3
    }
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Физика и игровой процесс