Комната побега
Часть раздела Физика и игровой процесс путешествия по Unity на Coddy. Урок 63 из 63.
Квест-комната с кодовым замком. На полу лежат три серые нажимные плиты, а дверь в северной стене открывается, только когда игрок наступает на них в правильном порядке: плита 1, плита 2, плита 3. В комнате ничто не подсказывает, где какая плита. Если наступить не на ту плиту, ввод кода начинается заново, и все плиты на секунду вспыхивают красным. Открытая дверь остается открытой несколько секунд, а затем снова закрывается, но никогда не захлопывается перед игроком: пока игрок стоит в дверном проеме, дверь ждет.
Скрипт Player готов: стрелки перемещают игрока, помеченного тегом Player и находящегося на слое Player. Напиши два скрипта: Plate для каждой плиты и CodeLock для замка.
Задание
Сложно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
}
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Физика и игровой процесс
1Твёрдое тело
Гравитация и массаТолкаем с помощью AddForceПрыжок с импульсомFixedUpdate для физикиСкоростьКинематические телаПовторение: пусковая площадка2Столкновения
OnCollisionEnterВо что я попал?Разрушение при столкновенииСтояние на землеОтскок и трениеФормы коллайдеровПовторение: разрушаемая стена5Проект: Погоня за монетами
Катящийся мячМонеты для сбора