🔍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コンポーネントを設定し、クリックできる状態にしておきます。

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 IEnumeratorUnlock()
{lockObject.SetActive(false);
unlockObject.SetActive(true);
yield return new WaitForSeconds(1f);
unlockObject.SetActive(false);
}
}
Inspectorの設定
スクリプトをアタッチしたら、Inspectorで3つのダイヤルとロック解除用オブジェクトを設定します。

まとめ
今回は、Unity 6で2D脱出ゲームに使える3桁のダイヤルロックギミックを作りました。
今回のポイントは、
- TextMeshProでダイヤルの数字を表示する
- Buttonをクリックして数字を1つずつ変更する
- 9の次は0に戻す
- 3つの数字をつなげて暗証番号を作る
- 正解コードと比較してロックを解除する
という仕組みです。
今回はあえてアニメーションを使わず、ダイヤルロックの基本的な仕組みだけを作りました。
次回は今回作ったダイヤルロックをさらに脱出ゲームらしくするために、LeanTweenを使って数字がスライドするアニメーションを追加していきます。


コメント