【Unity6】ダイヤルロックのギミックを作る方法|2D脱出ゲーム制作

Unity脱出ゲーム制作 ダイヤルロックの作成画像 ゲームの作り方

🔍2D脱出ゲームでよく使われる「ダイヤルロック」のギミックをUnity 6で作ってみます。

今回は、3桁のダイヤルをクリックすると数字が1つずつ切り替わり、正解の番号「760」になるとロックが解除される仕組みを作ります。

今回はまず基本的な数字の切り替えと正解判定までを作り、ダイヤルが回転するアニメーションは使用しません。

次回の記事では、Unityのアセット「LeanTween」を使って、数字がスライドするアニメーションを追加します。

今回作るダイヤルロック

今回作成するダイヤルロックは、脱出ゲームでよくある3桁の暗証番号タイプです。

今回の仕様

  • 3つのダイヤルの初期値は「000」
  • 各ダイヤルをクリックすると数字が1つ増える
  • 「9」の次は「0」に戻る
  • 3桁の数字を正解コードと比較する
  • 正解コードは「760」
  • 正解するとロックが解除される
  • 解除時にロックの画像を非表示にする
  • 解除後のオブジェクトを一時的に表示する

👇完成イメージは動画で確認できます。

※動画ではBGMや効果音を追加していますが、今回の記事ではダイヤルロックの基本的な仕組みを中心に解説します。

Unity側の準備

まず、ダイヤルロックに使用するGameObjectを用意します。

ヒエラルキーの構成

今回のHierarchyは、以下のようにします。

BackGround
├─ DialLock
│  ├─ Dial1
│  │   └─ NumberText
│  ├─ Dial2
│  │   └─ NumberText
│  └─ Dial3
│      └─ NumberText
└─ UnlockObject

各オブジェクトの役割

BackGround:今回作成するスクリプト「DialLock.cs」をアタッチします。

DialLock:ダイヤルロック本体の画像です。

Dial1~Dial3:それぞれ1桁目、2桁目、3桁目のダイヤルです。
今回はButtonコンポーネントを使用し、クリックしたときに数字を変更します。

NumberText:各ダイヤルに表示する数字です。
TextMeshPro(TMP)を使用します。

UnlockObject:正解したときに表示するオブジェクトです。
今回は、ロックが解除された状態の画像などを設定します。

ダイヤルの数字を設定する

  • 3つの「NumberText」に、仮の数字として「0」を入力します。
  • 文字のサイズや位置を調整して、ダイヤルの中央に数字が表示されるようにしておきます。
  • Dial1~Dial3にはButtonコンポーネントを設定し、クリックできる状態にしておきます。
Unityゲームの作り方「ダイヤルロック」の制作画像

DialLock.csを作成する

using UnityEngine;
using UnityEngine.UI;

using TMPro;
using System.Collections;

public class DialLock : MonoBehaviour
{
 [System.Serializable]
 public class Dial
 {

  public Button dialButton;
  public TMP_Text numberText;
[HideInInspector]
public int currentNumber = 0;
}

public Dial[] dials;
public string correctCode = "760";


public GameObject lockObject;
public GameObject unlockObject;

private void Start()
{
for (int i = 0; i < dials.Length; i++)
{
int index = i;

// 初期値「0」
dials[i].currentNumber = 0;
dials[i].numberText.text = "0";

dials[i].dialButton.onClick.AddListener(() =>
{
ChangeNumber(index);
});
}
}

// ダイヤルをクリックしたとき
private void ChangeNumber(int index)
{
Dial d = dials[index];

d.currentNumber++;

if (d.currentNumber > 9)
{
d.currentNumber = 0;
}

// TMPの表示を更新
d.numberText.text = d.currentNumber.ToString();


CheckAnswer();
}

// 正解判定
private void CheckAnswer()
{
string code = "";

foreach (Dial d in dials)
{
code += d.currentNumber.ToString();
}

Debug.Log("現在の番号:" + code);

if (code == correctCode)
{
StartCoroutine(Unlock());
}
}

private IEnumerator
Unlock()
{
lockObject.SetActive(false);
unlockObject.SetActive(true);
yield return new WaitForSeconds(1f);
unlockObject.SetActive(false);
}
}

Inspectorの設定

スクリプトをアタッチしたら、Inspectorで3つのダイヤルとロック解除用オブジェクトを設定します。

Unity 脱出ゲームの作り方
Dail Lock.csのインスペクター設定画面

まとめ

今回は、Unity 6で2D脱出ゲームに使える3桁のダイヤルロックギミックを作りました。

今回のポイントは、

  • TextMeshProでダイヤルの数字を表示する
  • Buttonをクリックして数字を1つずつ変更する
  • 9の次は0に戻す
  • 3つの数字をつなげて暗証番号を作る
  • 正解コードと比較してロックを解除する

という仕組みです。

今回はあえてアニメーションを使わず、ダイヤルロックの基本的な仕組みだけを作りました。

次回は今回作ったダイヤルロックをさらに脱出ゲームらしくするために、LeanTweenを使って数字がスライドするアニメーションを追加していきます。

コメント

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