モズク食べる

雑食雑記

Unityでダイヤル錠を作りたい

◆Unityでダイヤル錠を作りたい

【目的】

脱出ゲームにありがちな3桁か4桁の数字をダイヤル鍵に入力してもらい

スクリプトで正解の数字と比較して答え合わせする っていうのをつくりたい。

一応ググってみたところ、

haruoroom.work

 というやり方があるみたいです。

今回は数字の画像を一枚一枚作りたいというわけではないので、 超簡略な方法で作りました。 らくらくなので需要あるのか分かりませんが ググって出てきたらそれはそれで安心かと思うので一応書いておきます。

3桁くらいなのでこれでも良いと思うところですが 数字を画像にしたり桁が増えるときは配列の使い所なのですかなあと思います。

◆手順

【完成イメージ】

数字のボタンを押すと「0→1→2→3→・・・・9→0」と表示が遷移します。 不正解の数字の組み合わせのままEnterを押すと「不正解」の表示をします。 正解の数字の組み合わせでEnterを押すと「正解」の表示をします。

f:id:mozukuino:20190105021102g:plain

(録画にScreenToGifを使ってみました。便利ですね)

C#スクリプト(初心者なので微妙な可能性あり)】

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

public class EscapeGameManager : MonoBehaviour {

    public GameObject buttonMessageDial; //ボタン:メッセージDial
    public GameObject buttonMessageTextDial; //メッセージテキストDial


    public GameObject buttonDialLText; //左ダイヤルテキスト
    public GameObject buttonDialMText; //真ん中ダイヤルテキスト
    public GameObject buttonDialRText; //右ダイヤルテキスト


    public int NumL = 0;
    public int NumM = 0;
    public int NumR = 0;

    void Start () {
    }
    
    // Update is called once per frame
    void Update () {   
    }
//DialLを押した
    public void PushButtonDialL()
    {
        NumL = NumL+1; //押される毎に1足していく

        if (NumL == 10) //表示前に判定、10になっていたら
        {
            NumL = 0; //0に戻す。
        }
        else { } //1~9のあいだったら何もしない
        buttonDialLText.GetComponent<Text>().text = NumL.ToString();
    }

    //DialMを押した
    public void PushButtonDialM()
    {
        NumM = NumM + 1;

        if (NumM == 10)
        {
            NumM = 0;
        }
        else { }
        buttonDialMText.GetComponent<Text>().text = NumM.ToString();
    }

    //DialRを押した
    public void PushButtonDialR()
    {
        NumR = NumR + 1;

        if (NumR == 10)
        {
            NumR = 0;
        }
        else { }
        buttonDialRText.GetComponent<Text>().text = NumR.ToString();
    }


    //DialEnterを押した
    public void PushButtonDialEnter()
    {

        if (NumL==1 && NumM==2 && NumR==3) //ダイヤルナンバー正誤用(1,2,3)
        {

            DisplayMessageDial("正解!▼");
        }
        else
        {
            DisplayMessageDial("ブッブー!▼");
        }
    }

    //Dialメッセージを表示
    void DisplayMessageDial(string message)
    {
        buttonMessageDial.SetActive(true);
        buttonMessageTextDial.GetComponent<Text>().text = message;
    }

    public void PushButtonMessageDial()
    {
        buttonMessageDial.SetActive(false); //メッセージを消す
    }
    

Unity側は普通にインスペクタの変数に適用して メソッドを割り当てるだけです。

らくらく