Sala de Fuga
Parte da seção Física e jogabilidade do Journey de Unity da Coddy. Lição 63 de 63.
Uma sala de fuga com uma fechadura de código. Três placas de pressão cinzas ficam no chão, e a porta na parede norte só se abre quando o jogador pisa nelas na ordem correta: placa 1, placa 2, placa 3. Nada na sala indica qual placa é qual. Se pisar na placa errada, a sequência recomeça e todas as placas piscam em vermelho por um segundo. A porta aberta permanece assim por alguns segundos e depois se fecha novamente, mas nunca com o jogador no caminho: enquanto o jogador estiver na entrada, ela espera.
O script Player está pronto: as setas movem o jogador, que tem a tag Player e está na camada Player. Escreva dois scripts: Plate em cada placa e CodeLock na Lock.
Desafio
DifícilPlate, em cada placa (um gatilho). No Inspector, atribua a ela number (1, 2 ou 3) e codeLock (o script CodeLock da trava).
- Quando o jogador (marcado com a tag
Player) pisar na placa, chamecodeLock.Press(number). Qualquer outra coisa que cair sobre ela não fará nada.
CodeLock, na trava. No Inspector, atribua a ele plates (os Renderers das três placas, em ordem), door (a porta), doorway (um ponto no meio da entrada) e openTime (4).
- Um método público
Press(int number). Quandonumberfor o número da placa que o código espera em seguida (1, depois 2 e depois 3), registre esse número, como emPlate 2. Quando essa for a placa 3, registre tambémUnlocked, recomece o código pela placa 1 e inicie uma coroutine que abre a porta. - Qualquer outra placa registra
Wrong plate, recomeça o código pela placa 1 e inicia uma coroutine que deixa todas as placas vermelhas (Color.red) por 1 segundo e, em seguida, cinzas (Color.gray) novamente. - A coroutine da porta desativa a porta e espera
openTimesegundos. Depois, continua esperando, um quadro por vez, enquanto qualquer coisa na camada Player estiver a menos de 1 unidade dedoorway. Por fim, ativa a porta novamente e registraDoor closed.
Pressione Play, descubra a ordem e saia; depois, clique em Check.
Experimente você mesmo
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)
{
// verifique o código; faça as placas piscarem se estiver errado; abra a porta após a placa 3
}
}
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Física e jogabilidade
1Rigidbody
Gravidade e MassaEmpurrar com AddForcePular com um ImpulsoFixedUpdate para FísicaVelocidadeCorpos CinemáticosRevisão: Plataforma de Lançamento2Colisões
OnCollisionEnterO que eu acertei?Quebre no impactoNo chãoQuique e atritoFormas dos collidersRevisão: Parede destrutível5Projeto: Corrida das Moedas
A Bola RolanteMoedas para Coletar