『東京パソコンクラブ』でアイドルとUnityを学ぶ ⑧ 脱出ゲーム

スポンサーリンク
スポンサーリンク

脱出ゲーム

引き続き。なんかしれっと項目の内容変わってね?

まぁいいんだけどさ。

スポンサーリンク

何をするか

ちょっと整理する。

今作ってるのは「鍵を使って扉を開けるゲーム」。前回までで、クリックしたら扉が開く、というところが作れた。現在までに教えてもらった内容を利用して、目標までにあと何が必要だろうか。

そもそも「鍵を使って扉を開けるゲーム」として期待される動作とは何だろう。スタートから分解してみる。

  1. 画面に扉と鍵が表示されている
  2. この時点で扉をクリックしても開かない
  3. 鍵をクリックする(鍵を取得する)
  4. 鍵が消える(鍵を取得したことの演出)
  5. 扉をクリックする
  6. 扉が開く
  7. 脱出成功の表示が現れる

大体こんな感じかなぁ。前回までで5と6の部分を作れた。

今回はここに「鍵を取得したかどうか」という2と3の要素を加えることになる。ではここで、その要素を実現するための仕組みを考えなければならない。ここでいう仕組みというのはフローチャート的なもので、Unity上でどう実現するか、という視点とはまた別だ。いったん、5と6ではどういう仕組みにしたか振り返ると

  1. 画面に扉を表示する
  2. 扉の所には透明なボタンを設置する
  3. 扉=透明なボタンをクリックすると、扉の画像を閉じているものから開いてるものへ差し替える

という仕組みで、クリックしたら扉が開くという動作を実現できた。前回はこれをUnity上に落とし込んだわけだ。ここに2と3の要素を加えるにはどうしたらよいだろうか。

2と3の要素というのは「鍵を取得したかどうか」によって処理を分けることによって実現できる。「鍵を取得したかどうか」は、双六の時にやったフラグを利用することで判定できる。つまり、「もし鍵を取得していたら、扉をクリックした時に扉が開く」という動作の仕組みを考えることになる。じゃあ

  1. 画面に鍵を表示する
  2. 「鍵を取得したかどうか」を判定するためのフラグを用意する
  3. 鍵と同形に透明なボタンを設置する
  4. 鍵=透明なボタンをクリックしたら、2のフラグを立てる(オンにする・trueを入れる)
  5. 扉をクリックすると、フラグから「鍵を取得したかどうか」を判定し、取得していたら扉の画像を差し替える

という仕組みで実現できそうだ。ということで、これをUnity上に落とし込んでいく。

スポンサーリンク

フラグが立っていない時は扉が開かないようにする

Doorを

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Door : MonoBehaviour
{
    public Image image;
    public Sprite sprite;
    public bool flag = false;

    public void Open()
    {
        if (flag == true)
        {
            image.sprite = sprite;
        }
    }

}

こう変えた。フラグ用変数をflagって命名しちゃいけないてどっかで見たけどそれは置いといて、このflagが鍵を持っているかどうかを表すことになる。

スポンサーリンク

鍵の画像とボタンを用意

Canvas上にImageで鍵の画像を読み込み、透明なボタンを作成する。

スポンサーリンク

鍵をクリックしたらフラグを立てる

新たにKeyスクリプトを作る。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Key : MonoBehaviour
{
    public Door door;
    
    public void PickUp()
    {
        door.flag = true;
    }
}

ImageやSpriteやTextと同じく、自分で作ったDoorでも変数を宣言できるんだなぁ。考えてみりゃそうなんだけど、教わらないと難しいよなこれは。PickUp関数内ではDoorが持ってるflagにtrueを代入している。このフラグは鍵を持っているかのフラグなので、これで鍵を持っていることになる。スクリプトを保存したら鍵用のButtonのAddComponentにD&Dし、InspectorのKey(script)のDoorには扉のImage、onClickには自分自身であるButton、FunctionにPickUpを設定する。

そしたら実行すると

できた~。次回で完成かな?

コメント

タイトルとURLをコピーしました