脱出ゲーム始めました!

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

まず宝箱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
宝箱の拡大画面を非表示にして次回に続きます。



カレンダーと宝箱2つ、ドアを配置していきます。

ゲームの流れとしては、
カレンダーについた印をヒントに番号を入力、

開いた宝箱からカギを手に入れて、そのカギで別の宝箱を開け、

ドアのカギを手に入れて脱出
となります。

カレンダーの画像
と、
閉じたドア、開いたドアのセット、
閉じた宝箱、開いた宝箱のセットを2つ用意して下さい。

wall1ドアwall2宝箱1wall3カレンダー
wall4宝箱2UI>Image で配置します。

開いた状態のものは入れ替わった時に違和感がないように
うまく重ね、非表示
にして下さい。


カレンダーには、ヒントとして6月13日のところに
UI>Text赤い丸を付けます。
tuto9


カレンダーの拡大


このままでは、数字や印の部分が見づらいので
カレンダーをタッチしたときに大きく表示されるように
画像を用意します。

wall3 の子要素として UI>Image を(一番下に)配置

Anchor Presetsstretch, stretch にし、

left, right, top, bottom, 全てを 0 に、

Source Image部屋の壁と同じものにし、

その子要素にカレンダーをコピーしたものを置き

ScaleX, Y を変更し拡大します。
tuto10
カレンダー拡大画面の一番下に、横長のボタンを設置し
Text V で下向きの矢印を表します。

拡大画像は一旦、非表示にして下さい。

今回はここまでです。



まず移動用のボタンを作ります。


wall1 の子要素として UI>Button でボタンを2つ作り
それぞれ以下のようにして画面の両端に配置します。

ボタンの名前leftmove, rightmove に変え

leftmove Anchor Presets middle, left

Pos X 20 Pos Y 0
Width40
 Height300


rightmove Anchor Presetsmiddle, right


Pos X -20 Pos Y 0
Width40 Height300

双方の color の透明度100に落とし

テキストには矢印として <, > を入れ
フォントの大きさを調整します。

tuto7
ボタンを作り終えたら、wall1 をコピーして、wall2, 3, 4 を作り

wall1 itemran の間に並べます。

wall2~4 の間前左のチェックを外し、非表示にしておいてください。

続いて、Main Camera に以下のスクリプトを取り付けます。

   ↓
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 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);
    }
}

Main Camera
InspectortutorialScript の wall1~4

Hierarchy
wall1~4 をそれぞれドラックして設定します。


時計回りwall1, wall2, wall3 と移動させるために

InspectorOn Click+を押しリストを追加、

スクリプトが取り付けられた Main Camera を選択し


No Function
tutorialScript に変え

wall1 の左ボタンには、gotowall4、右には gotowall2

wall2 の左ボタンには、gotowall1、右には gotowall3

wall3 の左ボタンには、gotowall2、右には gotowall4

wall4 の左ボタンには、gotowall3、右には gotowall1 
tuto8
設定が終わったらゲームを再生してボタンをクリックしてみてください。

全て同じ画像なので今のところは、分かりづらいですが

画像の切り替えが行われているはずです。
(Hierarchy の文字の濃淡で確認できます)

表示: オブジェクト名.SetActive(true);
非表示:オブジェクト名.SetActive(false);


最も基本的なことなので覚えておいてください。

今回はここまでです。

↑このページのトップヘ