脱出ゲーム始めました!

Unityで作った脱出ゲームを公開しています。拙い作品ですが暇つぶしにでも遊んでいただければ幸いです。
あわせて簡単な脱出ゲームの作り方もまとめています。

Unityでの脱出ゲームの作り方・基礎編その7【完成】

tutorialscript に加筆していきます。

C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;//書き加えないとToggleが使えない

public class tutorialScript : MonoBehaviour {

    public GameObject wall1;
    public GameObject wall2;
    public GameObject wall3;
    public GameObject wall4;

    public GameObject close_door;//閉じた状態のドア
    public GameObject open_door;//開いたドア
    public GameObject close_treasurebox1;//閉じた宝箱1
    public GameObject open_treasurebox1;//開いた宝箱1
    public GameObject close_treasurebox2;//閉じた宝箱2
    public GameObject open_treasurebox2;//開いた宝箱2

    public GameObject key1;//カギ1を格納
    public GameObject key2;//カギ2を格納

    public Toggle key1_toggle;//カギ1を格納、アイテム選択の状態を取得するのに必要
    public Toggle key2_toggle;//カギ2を格納、アイテム選択の状態を取得するのに必要

    public GameObject calender_kakudai;//カレンダーの拡大画面
    public GameObject treasurebox2_kakudai;//宝箱2の数字入力画面

    public GameObject itemgetandclear;//下3つを表示するための全画面の透明な土台
    public GameObject key1_get;//カギ1入手時に表示
    public GameObject key2_get;//カギ2入手時に表示
    public GameObject clear_text;//ドアを開けた時に表示


    public GameObject left0;
    public GameObject left1;
    public GameObject left2;
    public GameObject left3;
    public GameObject left4;
    public GameObject left5;
    public GameObject left6;
    public GameObject left7;
    public GameObject left8;
    public GameObject left9;

    public GameObject center0;
    public GameObject center1;
    public GameObject center2;
    public GameObject center3;
    public GameObject center4;
    public GameObject center5;
    public GameObject center6;
    public GameObject center7;
    public GameObject center8;
    public GameObject center9;

    public GameObject right0;
    public GameObject right1;
    public GameObject right2;
    public GameObject right3;
    public GameObject right4;
    public GameObject right5;
    public GameObject right6;
    public GameObject right7;
    public GameObject right8;
    public GameObject right9;

    void Update()
    {
        //613と入力し、かつ宝箱2が閉じているとき
        if (left6.activeInHierarchy == true && center1.activeInHierarchy == true &&
            right3.activeInHierarchy == true&& close_treasurebox2.activeInHierarchy == true)
        {
            close_treasurebox2.SetActive(false);
            open_treasurebox2.SetActive(true);
            treasurebox2_kakudai.SetActive(false);
            itemgetandclear.SetActive(true);
            key1_get.SetActive(true);
        }
    }


    public void gotowall1()
    {
        wall1.SetActive(true);
        wall2.SetActive(false);
        wall3.SetActive(false);
        wall4.SetActive(false);
    }

    public void gotowall2()
    {
        wall1.SetActive(false);
        wall2.SetActive(true);
        wall3.SetActive(false);
        wall4.SetActive(false);
    }

    public void gotowall3()
    {
        wall1.SetActive(false);
        wall2.SetActive(false);
        wall3.SetActive(true);
        wall4.SetActive(false);
    }

    public void gotowall4()
    {
        wall1.SetActive(false);
        wall2.SetActive(false);
        wall3.SetActive(false);
        wall4.SetActive(true);
    }

    //ヒエラルキーの閉じたドアに取り付ける
    public void doortap()
    {
        if (key2.activeInHierarchy == true && key2_toggle.isOn == true)
        {
            key2.SetActive(false);
            close_door.SetActive(false);
            open_door.SetActive(true);
            itemgetandclear.SetActive(true);
            clear_text.SetActive(true);
        }
    }

    //ヒエラルキーのカレンダーに取り付ける
    public void calendertap()
    {
        calender_kakudai.SetActive(true);
    }
    //ヒエラルキーのカレンダー拡大画像のボタンに取り付ける
    public void calender_returntap()
    {
        calender_kakudai.SetActive(false);
    }

    //閉じた宝箱1に取り付ける
    public void treasurebox1tap()
    {
        if (key1.activeInHierarchy == true && key1_toggle.isOn == true)
        {
            key1.SetActive(false);
            close_treasurebox1.SetActive(false);
            open_treasurebox1.SetActive(true);
            itemgetandclear.SetActive(true);
            key2_get.SetActive(true);
        }
    }

    //閉じた宝箱2に取り付ける
    public void treasurebox2tap()
    {
        treasurebox2_kakudai.SetActive(true);
    }

    //数字入力画面の下部の戻るボタンに取り付ける
    public void treasurebox2_returntap()
    {
        treasurebox2_kakudai.SetActive(false);
    }

    public void leftbuttontap()
    {
        if (left0.activeInHierarchy == true)
        {
            left0.SetActive(false);
            left1.SetActive(true);
        }
        else if (left1.activeInHierarchy == true)
        {
            left1.SetActive(false);
            left2.SetActive(true);
        }
        else if (left2.activeInHierarchy == true)
        {
            left2.SetActive(false);
            left3.SetActive(true);
        }
        else if (left3.activeInHierarchy == true)
        {
            left3.SetActive(false);
            left4.SetActive(true);
        }
        else if (left4.activeInHierarchy == true)
        {
            left4.SetActive(false);
            left5.SetActive(true);
        }
        else if (left5.activeInHierarchy == true)
        {
            left5.SetActive(false);
            left6.SetActive(true);
        }
        else if (left6.activeInHierarchy == true)
        {
            left6.SetActive(false);
            left7.SetActive(true);
        }
        else if (left7.activeInHierarchy == true)
        {
            left7.SetActive(false);
            left8.SetActive(true);
        }
        else if (left8.activeInHierarchy == true)
        {
            left8.SetActive(false);
            left9.SetActive(true);
        }
        else if (left9.activeInHierarchy == true)
        {
            left9.SetActive(false);
            left0.SetActive(true);
        }
    }

    public void centerbuttontap()
    {
        if (center0.activeInHierarchy == true)
        {
            center0.SetActive(false);
            center1.SetActive(true);
        }
        else if (center1.activeInHierarchy == true)
        {
            center1.SetActive(false);
            center2.SetActive(true);
        }
        else if (center2.activeInHierarchy == true)
        {
            center2.SetActive(false);
            center3.SetActive(true);
        }
        else if (center3.activeInHierarchy == true)
        {
            center3.SetActive(false);
            center4.SetActive(true);
        }
        else if (center4.activeInHierarchy == true)
        {
            center4.SetActive(false);
            center5.SetActive(true);
        }
        else if (center5.activeInHierarchy == true)
        {
            center5.SetActive(false);
            center6.SetActive(true);
        }
        else if (center6.activeInHierarchy == true)
        {
            center6.SetActive(false);
            center7.SetActive(true);
        }
        else if (center7.activeInHierarchy == true)
        {
            center7.SetActive(false);
            center8.SetActive(true);
        }
        else if (center8.activeInHierarchy == true)
        {
            center8.SetActive(false);
            center9.SetActive(true);
        }
        else if (center9.activeInHierarchy == true)
        {
            center9.SetActive(false);
            center0.SetActive(true);
        }
    }

    public void rightbuttontap()
    {
        if (right0.activeInHierarchy == true)
        {
            right0.SetActive(false);
            right1.SetActive(true);
        }
        else if (right1.activeInHierarchy == true)
        {
            right1.SetActive(false);
            right2.SetActive(true);
        }
        else if (right2.activeInHierarchy == true)
        {
            right2.SetActive(false);
            right3.SetActive(true);
        }
        else if (right3.activeInHierarchy == true)
        {
            right3.SetActive(false);
            right4.SetActive(true);
        }
        else if (right4.activeInHierarchy == true)
        {
            right4.SetActive(false);
            right5.SetActive(true);
        }
        else if (right5.activeInHierarchy == true)
        {
            right5.SetActive(false);
            right6.SetActive(true);
        }
        else if (right6.activeInHierarchy == true)
        {
            right6.SetActive(false);
            right7.SetActive(true);
        }
        else if (right7.activeInHierarchy == true)
        {
            right7.SetActive(false);
            right8.SetActive(true);
        }
        else if (right8.activeInHierarchy == true)
        {
            right8.SetActive(false);
            right9.SetActive(true);
        }
        else if (right9.activeInHierarchy == true)
        {
            right9.SetActive(false);
            right0.SetActive(true);
        }
    }

    //ヒエラルキーのアイテム入手、クリアの土台パネルに取り付ける
    public void itemgetandcleartap()

    {
        if (key1_get.activeInHierarchy == true)
        {
            itemgetandclear.SetActive(false);
            key1_get.SetActive(false);
            key1.SetActive(true);
        }
        if (key2_get.activeInHierarchy == true)
        {
            itemgetandclear.SetActive(false);
            key2_get.SetActive(false);
            key2.SetActive(true);
        }

    }
}
※青が加筆部分です

if (Toggle名.isOn == true)
        {         
        }
で、アイテムが選択状態なら { } が
実行されるという意味になります。

ただこれだと、isOn にチェックが入ったままアイテムを消費して
非表示にする場合、isOnのチェックがそのまま維持され
何度もイベントが発生してしまうことがあるため、都合が悪い場合には

if (key1.activeInHierarchy == true && key1_toggle.isOn == true)


のように、アイテムのアクティブ状態も問うようにしたり、

bool を使いイベントが1度しか発生しないようにする
などの対策が必要です。
   ↓

Unityでの脱出ゲームの作り方・基礎編その10
【イベントを1度しか発生させないようにする】


あとは今までやったように、
加筆部分の格納、取り付けを行えば完成です。

tuto17
最低限のことだけやりましたが、
お付き合いいただきありがとうございました。

少しでもお役に立てれば幸いです。

Unityでの脱出ゲームの作り方・基礎編その6【その他の必要なものの作成】

アイテムを入手した時の画像
ゲームクリア時に表示されるテキストを作ります。

これらが表示されている間は他のものに触れないように
上から全画面の透明なパネルを貼り付けます。
Color 透明度を 0 にして下さい)
tuto14
その子要素としてアイテム欄に重ならないように
UI>Image適当な大きさ、色の長方形を設け
更にその子要素アイテムの拡大画像をおきます。

tuto15
key1key2 の2つ作ってください。

UI>Textドアを開けたときに表示される
「CLEAR」のテキスト
も作ります。

tuto16
今回作ったものは非表示にして下さい。

次回、スクリプトを書いて取り付ければ完成です。


Unityでの脱出ゲームの作り方・基礎編5【数字を入力する仕掛けを作る】

まず宝箱2のカギ穴の部分の上に小さな画像を重ねて隠してください。

うまく色が設定できない場合は、同じ部分の色を切り取って
Source Image として使えば違和感なくしあがります。

wall4 にカレンダーの拡大場面を作ったのと同じように Image を設定し
Source ImageColor宝箱の黄色部分の色を再現します。

その子要素に3枚の Image を大きさを調整して横に並べ

さらに、3枚それぞれに UI>Text で、0から9までの10個の Text を
子要素として設け
、大きさ・座標を修正し
0以外の数字を非表示にして下さい。
tuto12
続いてスクリプトを書いていきます。
tutorialscript に加筆してください。


C#

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

public class tutorialScript : MonoBehaviour {

    public GameObject wall1;
    public GameObject wall2;
    public GameObject wall3;
    public GameObject wall4;

    public GameObject left0;
    public GameObject left1;
    public GameObject left2;
    public GameObject left3;
    public GameObject left4;
    public GameObject left5;
    public GameObject left6;
    public GameObject left7;
    public GameObject left8;
    public GameObject left9;

    public GameObject center0;
    public GameObject center1;
    public GameObject center2;
    public GameObject center3;
    public GameObject center4;
    public GameObject center5;
    public GameObject center6;
    public GameObject center7;
    public GameObject center8;
    public GameObject center9;

    public GameObject right0;
    public GameObject right1;
    public GameObject right2;
    public GameObject right3;
    public GameObject right4;
    public GameObject right5;
    public GameObject right6;
    public GameObject right7;
    public GameObject right8;
    public GameObject right9;


    public void gotowall1()
    {
        wall1.SetActive(true);
        wall2.SetActive(false);
        wall3.SetActive(false);
        wall4.SetActive(false);
    }

    public void gotowall2()
    {
        wall1.SetActive(false);
        wall2.SetActive(true);
        wall3.SetActive(false);
        wall4.SetActive(false);
    }

    public void gotowall3()
    {
        wall1.SetActive(false);
        wall2.SetActive(false);
        wall3.SetActive(true);
        wall4.SetActive(false);
    }

    public void gotowall4()
    {
        wall1.SetActive(false);
        wall2.SetActive(false);
        wall3.SetActive(false);
        wall4.SetActive(true);
    }

    public void leftbuttontap()
    {
        if (left0.activeInHierarchy == true)
        {
            left0.SetActive(false);
            left1.SetActive(true);
        }
        else if (left1.activeInHierarchy == true)
        {
            left1.SetActive(false);
            left2.SetActive(true);
        }
        else if (left2.activeInHierarchy == true)
        {
            left2.SetActive(false);
            left3.SetActive(true);
        }
        else if (left3.activeInHierarchy == true)
        {
            left3.SetActive(false);
            left4.SetActive(true);
        }
        else if (left4.activeInHierarchy == true)
        {
            left4.SetActive(false);
            left5.SetActive(true);
        }
        else if (left5.activeInHierarchy == true)
        {
            left5.SetActive(false);
            left6.SetActive(true);
        }
        else if (left6.activeInHierarchy == true)
        {
            left6.SetActive(false);
            left7.SetActive(true);
        }
        else if (left7.activeInHierarchy == true)
        {
            left7.SetActive(false);
            left8.SetActive(true);
        }
        else if (left8.activeInHierarchy == true)
        {
            left8.SetActive(false);
            left9.SetActive(true);
        }
        else if (left9.activeInHierarchy == true)
        {
            left9.SetActive(false);
            left0.SetActive(true);
        }
    }

    public void centerbuttontap()
    {
        if (center0.activeInHierarchy == true)
        {
            center0.SetActive(false);
            center1.SetActive(true);
        }
        else if (center1.activeInHierarchy == true)
        {
            center1.SetActive(false);
            center2.SetActive(true);
        }
        else if (center2.activeInHierarchy == true)
        {
            center2.SetActive(false);
            center3.SetActive(true);
        }
        else if (center3.activeInHierarchy == true)
        {
            center3.SetActive(false);
            center4.SetActive(true);
        }
        else if (center4.activeInHierarchy == true)
        {
            center4.SetActive(false);
            center5.SetActive(true);
        }
        else if (center5.activeInHierarchy == true)
        {
            center5.SetActive(false);
            center6.SetActive(true);
        }
        else if (center6.activeInHierarchy == true)
        {
            center6.SetActive(false);
            center7.SetActive(true);
        }
        else if (center7.activeInHierarchy == true)
        {
            center7.SetActive(false);
            center8.SetActive(true);
        }
        else if (center8.activeInHierarchy == true)
        {
            center8.SetActive(false);
            center9.SetActive(true);
        }
        else if (center9.activeInHierarchy == true)
        {
            center9.SetActive(false);
            center0.SetActive(true);
        }
    }

    public void rightbuttontap()
    {
        if (right0.activeInHierarchy == true)
        {
            right0.SetActive(false);
            right1.SetActive(true);
        }
        else if (right1.activeInHierarchy == true)
        {
            right1.SetActive(false);
            right2.SetActive(true);
        }
        else if (right2.activeInHierarchy == true)
        {
            right2.SetActive(false);
            right3.SetActive(true);
        }
        else if (right3.activeInHierarchy == true)
        {
            right3.SetActive(false);
            right4.SetActive(true);
        }
        else if (right4.activeInHierarchy == true)
        {
            right4.SetActive(false);
            right5.SetActive(true);
        }
        else if (right5.activeInHierarchy == true)
        {
            right5.SetActive(false);
            right6.SetActive(true);
        }
        else if (right6.activeInHierarchy == true)
        {
            right6.SetActive(false);
            right7.SetActive(true);
        }
        else if (right7.activeInHierarchy == true)
        {
            right7.SetActive(false);
            right8.SetActive(true);
        }
        else if (right8.activeInHierarchy == true)
        {
            right8.SetActive(false);
            right9.SetActive(true);
        }
        else if (right9.activeInHierarchy == true)
        {
            right9.SetActive(false);
            right0.SetActive(true);
        }
    }

}
※青が加筆部分です

if (オブジェクト名.activeInHierarchy == true)
        {
         }

は、オブジェクトが、その親要素全ても含めてアクティブな状態
指します。

(
activeInHierarchy == false ならオブジェクトそのもの、
もしくは親要素が一つでも非表示の場合
)

つまりゲーム画面に表示されているかどうかです。

似たようなものに activeSelf というのがありますが

こちらは、オブジェクトそのもののアクティブ状態だけを見るもので
親要素は関係ありません。
場合によって使い分けてください。

スクリプトを書き終えセーブしたら、
Hierarchy MainCamera のスクリプト欄に
新しくできた部分に対応させるものをドラックし格納します。

続いて、3つの数字板それぞれに
左上 Component>Event>Event Trigger を取り付け
Add New Event Type
Pointer Down
触れたときにイベント開始)を選択、

画面移動用のボタンと同じやり方で、

には leftbuttontap, 真ん中には centerbuttontap,

には rightbuttontap を設定していきます。

ゲームを再生してみてください。

数字をタッチして、うまくいったなら
カレンダーの時と同じように
画面の一番下に横長のボタンを設置し
Text V で下向きの矢印を表します。
(コピペで可)

tuto13
宝箱の拡大画面を非表示にして次回に続きます。



スポンサードリンク

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