脱出ゲーム
CoddyのUnityジャーニー「物理演算とゲームプレイ」セクションの一部。レッスン 63/63。
コードロックのある脱出ルーム。床には3枚の灰色の感圧プレートがあり、北側の壁のドアは、プレイヤーが正しい順序、つまりプレート1、プレート2、プレート3の順に踏んだときだけ開きます。部屋の中には、どのプレートがどれなのかを示すものはありません。間違ったプレートを踏むと、コードが最初からやり直しになり、すべてのプレートが1秒間赤く点滅します。開いたドアは数秒間開いたままになり、その後再び閉じますが、プレイヤーの上では決して閉じません。プレイヤーが戸口に立っている間、ドアは待機します。
Playerスクリプトは準備済みです。矢印キーでプレイヤーを移動できます。プレイヤーにはPlayerタグが設定され、Playerレイヤーに配置されています。2つのスクリプトを作成してください。各プレートにはPlate、LockにはCodeLockを設定します。
チャレンジ
難しい各プレート(トリガー)に Plate を付けます。Inspector で number(1、2、または3)と codeLock(Lock の CodeLock スクリプト)を設定します。
- プレイヤー(
Playerタグ付き)がプレートに乗ったら、codeLock.Press(number)を呼び出します。それ以外のものが乗っても何も起こりません。
Lock に CodeLock を付けます。Inspector で plates(順番どおりの3つのプレートの Renderer)、door(Door)、doorway(出入り口の中央の点)、openTime(4)を設定します。
- public メソッド
Press(int number)を作成します。numberが次に期待されるプレート(1、次に2、次に3)であれば、Plate 2のようにログに出力します。それがプレート3だった場合は、さらにUnlockedをログに出力し、プレート1からコードをやり直して、ドアを開くコルーチンを開始します。 - それ以外のプレートの場合は、
Wrong plateをログに出力し、プレート1からコードをやり直して、すべてのプレートを1秒間赤(Color.red)にし、その後灰色(Color.gray)に戻すコルーチンを開始します。 - ドアのコルーチンはドアを非アクティブにして、
openTime秒待ちます。その後、Player レイヤー上のものがdoorwayから1単位以内にある間、1フレームずつ待ち続けます。最後に、ドアを再びアクティブにして、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を点滅させ、3番目のplateの後にdoorを開く
}
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。