유니티

(NGUI) 숫자 비밀번호 만들기

파란색까마귀 2022. 2. 14. 15:16

2016. 8. 11. 21:39

https://blog.naver.com/nagne2011/220785534767

 

- 29 - Unity - (NGUI) 숫자 비밀번호 만들기

위아래 화살표를 이용하여 각 번호의 숫자를 조절할 수 있습니다 그리고 숫자가 맞으면 아래에 Right가 표...

blog.naver.com

 

 

 

위아래 화살표를 이용하여 각 번호의 숫자를 조절할 수 있습니다

 

 

 

그리고 숫자가 맞으면 아래에 Right가 표시되죠

 

 

표시된 Right는 3초후 '...'으로 되돌아갑니다

 

만약 암호가 틀렸다면? Fail이 표시되죠

 

 

 

배경으로 쓸 backGround이미지와

 

빈 오브젝트 3개를 만들어서 각각 위아래 화살표와 숫자를 넣을곳을 만들어줍니다

그리고 각각 빈 오브젝트에 어제 사용했던 NGUI의 기능인 Grid를 이용해서 각버튼등을 정렬시켜 줍니다

 

 

 

 

 

위아래 숫자 변경 버튼에는 UIButton과 BoxCollider를 꼭! 넣어줍시다

 

 

 

그리고 숫자를 표시할 위치에는 UILabel을 이용하여 숫자를 잡아줍시다

 

 

마지막으로 확인 버튼을 만들어주고

아래에 확인 문구를 표시할 UILabel도 붙여줍니다



\

 

그럼 오브젝트들은 모두 배치완료!

 

이제 스크립트를 건드려봅시다

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    //빈 오브젝트(부모)
    public GameObject numbering;
    public GameObject uping;
    public GameObject downing;
 
    //각 버튼들 (자식)
    public GameObject[] numbers;
    public GameObject[] ups;
    public GameObject[] downs;
 
    //각 자릿수의 숫자들
    public int[] counter;
 
    //숫자 확인 문장
    public GameObject wordChecker;
 
    //현재 암호    
    public int passWord = 1234;
    
cs

 

선언부분 부터 봅시다

 

빈 오브젝트들(부모)를 가져올 오브젝트와

그 오브젝트들의 하위 버튼들을 담아둘 배열입니다

 

각 자릿수의 숫자들은 int로 선언해주고

 

숫자 확인용 UILabel이 붙은 오브젝트와

현재 암호를 int로 받습니다

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void Start () 
    {
        for (int i = 0; i < 4; i++
        {
            counter [i] = 0;
 
            string numberNum = string.Format ("number_{0}", i);
            numbers [i] = numbering.transform.FindChild (numberNum).gameObject;
            numbers [i].GetComponent<UILabel> ().text = counter [i].ToString ();
        
            string upNum = string.Format ("up_{0}", i);
            ups [i] = uping.transform.FindChild (upNum).gameObject;
 
            string downNum = string.Format ("down_{0}", i);    
            downs [i] = downing.transform.FindChild (downNum).gameObject;
        }
    
    }
cs

 

이제 각 배열에 오브젝트들을 맞춰서 담아줍시다

 

  counter [i] = 0;

 

그전에 각 숫자들을 초기화 시켜줍시다

 

그리고 어제 사용했던 방법대로 string.Format을 이용해서 name을 맞춘뒤

각 부모 오브젝트들의 자식들중에서 해당 name에 맞는 친구들을 가져다 끼워줍시다

 

for문을 돌리면 간단합니다

 

numbers [i].GetComponent<UILabel> ().text = counter [i].ToString ();

 

그리고 초기화 했던 각 숫자들에 맞게 숫자표시 UILabel을 갱신시켜 줍니다

이때 UIlabel는 string이고 counter는 int니까

int .ToString()을 이용해서 counter를 string으로 바꿔줍시다

 

이제 버튼들을 연동시켜 줍시다

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public void firstNumUP()
    {
        if (counter [0< 9
        {
            counter [0]++;
            numbers [0].GetComponent<UILabel> ().text = counter [0].ToString ();
        }
    }
    public void firstNumDown()
    {
        if (counter [0> 0
        {
            counter [0]--;
            numbers [0].GetComponent<UILabel> ().text = counter [0].ToString ();
        }
    }
cs

 

대충 만들었는데..

 

좀더 깔끔하게 압축 할 수 있을꺼 같기도하고....

 

 

 

UIButton에서 할당해줍시다

 

 

마지막으로 비밀번호 확인 버튼을 만들어 줍시다

 

아, 그전에 비밀번호 확인 문구가 3초뒤에 "...'으로 되돌아 올 수 있도록 

코루틴(Corutine)하나 만들어줍시다

 

 

1
2
3
4
5
IEnumerator CoWordReset()
    {
        yield return new WaitForSeconds (3.0f);
        wordChecker.GetComponent<UILabel> ().text = "...";
    }
cs

 

이제 함수 하나를 만들어서 아까와 같이 UIButton에 할당시켜 줍시다

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    public void numberCheck()
    {
        int challenger = counter [0* 1000
                         + counter [1* 100
                         + counter [2* 10
                         + counter [3];
        if (challenger == passWord) {
            wordChecker.GetComponent<UILabel> ().text = "Right..!!";
        } 
        else 
        {
            wordChecker.GetComponent<UILabel> ().text = "Fail..!!";
        }
 
        StartCoroutine ("CoWordReset");
        Debug.Log (challenger);
    }
cs

 

코드는 간단합니다

int형 변수를 하나 만들어준뒤

counter[0]은 1000의자릿수, counter[1]은 100의자릿수, counter[2]는 10의 자릿수, counter[3]은 1의 자릿수로 만들어주는거죠

 

그리고 만약(if) 그렇게 만든 숫자와 현제 PassWord가 같다면

함수 확인용 UIlabel이 Right를 표기하도록 하고

그렇지 않을 경우(else) fail을 표기하도록 합니다

 

그리고 마지막으로 3초짜리 코루틴을 실행시켜서 3초뒤에 '...'으로 되돌아오도록 하는거죠

 

끝!

 

728x90