돈 많은 백수가 되고 싶어

게임에서 쓰는 간단한 다이얼을 만들어 보자! 본문

유니티/간단한 퍼즐

게임에서 쓰는 간단한 다이얼을 만들어 보자!

미하루 2023. 9. 13. 02:11

아주 간단한 다이얼(잠금장치)를 유니티로 구현 해보겠습니다.

 

유니티를 실행 한 후 사진과 같이 UI를 세팅해 줍니다.

사진과 같이 세팅을 마쳤으면 "DialChar" 스크립트를 생성하고 Dial 오브젝트의 자식 오브젝트인 DialChar0 ~ 4까지 다중선택해서 스크립트를 넣어 줍니다.

 

그 후 다음과 같이 로직을 완들어 주면 됩니다.

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

public class DialChar : MonoBehaviour
{
	//각각의 UI에 A ~ I를 표시하시 위해서 알파벳 저장할 변수 배열
    string[] dialChars;
    //위 배열를 컨트롤하기 위한 배열 인덱스 변수
    int dialCharIndex;

    public Text dialCharTxt;
    public Dial dial;

    void Awake()
    {
        dialCharIndex = 0;
        dialChars = new string[] { "A", "B", "C", "D", "E", "F", "G", "H", "I" };
        dialCharTxt.text = dialChars[dialCharIndex];
    }

    public void CharUp()
    {
        dialCharIndex++;
        if (dialCharIndex == dialChars.Length) {
            dialCharIndex = 0;
            dialCharTxt.text = dialChars[dialCharIndex];
        }
        else {
            dialCharTxt.text = dialChars[dialCharIndex];
        }

        dial.AnswerCheck();
    }

    public void CharDown()
    {
        dialCharIndex--;
        if (dialCharIndex < 0) {
            dialCharIndex = dialChars.Length - 1;
            dialCharTxt.text = dialChars[dialCharIndex];
        }
        else {
            dialCharTxt.text = dialChars[dialCharIndex];
        }

        dial.AnswerCheck();
    }
}

그리고 public으로 선언된 dialCharTxt를 인스펙터 창에서 각각의 DialChar 0 ~ 1까지 자식으로 있는 text UI가져다가 초기화 해주면 됩니다.

그런데 이러면 public으로 된 또 하나의 변수 dial이 비어있죠?

dial에 변수에 Dial 오브젝트를 넣어서 초기화 할려고 해도 초기화가 안됩니다. 그 이유는 Dial 오브젝트에 "Dial"이라는 스크립트가 없기 때문입니다.

그럼 "Dial" 스크립트를 만들어서 Dial 오브젝트에 넣어보도록 하죠.

스크립트 생성 후 로직은 다음과 같습니다.

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

public class Dial : MonoBehaviour
{
    string answer;
    string result;

    public Text[] inputChars;

    void Awake()
    {
        answer = "ABCDE";
    }

    public void AnswerCheck()
    {
        result = null;
        for (int i = 0; i < inputChars.Length; i++)
        {
            result += inputChars[i].text;
        }
        if (answer == result)
        {
            Debug.Log("금고가 열렸습니다.");
        }
        else
            return;
    }
}

이렇게 로직이 완성이 되었으면 인스펙터 창에서 Dial 오브젝트를 가져다가 놓으면 초기화가 될 것 입니다.

 

이제 마지막으로 DialChar 오브젝트의 자식으로 있는 Up 버튼과 Down 버튼을 "DialChar" 스크립트 담겨있는 DialChar 오브젝트의 CharUp, CharDown 함수로 할당해 주시면 하나의 다이얼이 완성 됩니다.

 

추가 설명

만약 비밀번호를 바꾸고 싶으면 "Dial"스크립트의 answer변수를 변경하시면 됩니다.

 

완성영상

 

- YouTube

 

www.youtube.com