🎮 Unity

[UNITY] 랜덤 숫자 출력 / 버튼 이벤트 설정하기 / 성공.실패 이미지 띄우기

dlalwl_jpg 2023. 2. 27. 20:53

0부터 11까지 랜덤 수가 나오도록 하고, 랜덤한 숫자가 홀수인 경우에 홀수 버튼, 짝수인 경우에 짝수 버튼을 클릭했을 때 성공 문구를 띄우도록하자. 반대로 틀리게 버튼을 클릭하면 실패 문구가 나오도록 설정해보자.


랜덤하게 숫자 출력하기

버튼의 이벤트를 설정하기 위해서는 UI를 만들었을 때 자동으로 생성되었던 EventSystem을 이용하면 된다.

EventSystem을 클릭하고 인스펙터에서 AddComponent > script검색 > New Script클릭 > EventManager로 이름 설정 > Create and Add클릭하면 스크립트가 생성된다. 그리고 Assets 폴더에 생성된 스크립트를 Scripts폴더에 옮긴다. 그리고 스크립트를 열어준다.

EventManager 스크립트 생성된 모습

랜덤한 수를 만들기 위해서는 Random.Range() 함수를 이용한다. 아래와 같이 코드를 작성해준다.

 

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

public class EventManager : MonoBehaviour
{
    private int randomNum;

    void Start()
    {
        randomNum = Random.Range(0, 12); //랜덤숫자 생성
        Debug.Log(randomNum); //콘솔창에 출력
    }
}

Debug.Log는 Console창에서 랜덤한 수가 잘 나오는지 확인하기 위해 작성하였다. 코드를 저장하고 게임을 실행한 후 랜덤한 숫자가 잘 나오는지 콘솔창을 확인해본다.

랜덤한 숫자 콘솔창 확인

랜덤한 숫자가 잘 나오는 것을 확인할 수 있다.


버튼 이벤트 설정하기

랜덤한 수에 맞게 홀수, 짝수 버튼을 잘 클릭했는지 확인하도록 버튼에 따른 이벤트를 설정한다. 잘 맞게 눌렀다면 콘솔창에 true, 잘못 클릭했으면 false를 출력하도록 코드를 작성해준다.

 

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

public class EventManager : MonoBehaviour
{
    private int randomNum;

    void Start()
    {
        randomNum = Random.Range(0, 12);
        Debug.Log(randomNum);
    }

    //짝수버튼을 클릭했을 경우
    public void EvenButtonClick() 
    {
        if (randomNum % 2 == 0)
        {
            Debug.Log("true");
        }

        else
        {
            Debug.Log("false");
        }
	
    	//랜덤 숫자 다시 생성
        Start();
    }

    //홀수 버튼을 클릭했을 경우
    public void OddButtonClick()
    {
        if (randomNum % 2 != 0)
        {
            Debug.Log("true");
        }

        else
        {
            Debug.Log("false");
        }
		
        //랜덤 숫자 다시 생성
        Start();
    }

}

그 다음 짝수 버튼의 인스펙터에서 On Click() > '+' 클릭 > EventManager 스크립트 드래그 > No Funtion > EventManager > 해당하는 함수 선택(EvenButtonClick())

홀수 버튼도 똑같이 적용해준다. 그리고 결과를 확인해본다.

콜솔 결과 창


성공/실패 이미지 띄우기

먼저 image폴더에서 성공 시 띄울 이미지를 EventSystem에 드래그해준다. 그리고 체크를 해제해 비활성화 해준다. 이때, failure는 성공시 띄울 이미지의 인스펙터(크기, 위치 등의 상태)를 동일하게 하기 위해서 복붙한 다음 이름과 이미지를 바꿔주었다.

그리고 아래와 같이 EventManager 스크립트를 작성해준다.

 

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

public class EventManager : MonoBehaviour
{
    private int randomNum;
    public GameObject Success; //성공 이미지
    public GameObject Failure; //실패 이미지
    private bool success_state; //성공이미지 활성화.비활성화 설정
    private bool failure_state; //실패이미지 활성화.비활성화 설정

    //랜덤 숫자 생성
    void Start()
    {
        randomNum = Random.Range(0, 12);
        Debug.Log(randomNum);
    }

    //짝수 버튼 클릭 시
    public void EvenButtonClick()
    {
        if (randomNum % 2 == 0)
        {
            success_state = true;
            failure_state = false;
        }

        else
        {
            success_state = false;
            failure_state = true;
        }

        //이미지 출력
        Success.SetActive(success_state);
        Failure.SetActive(failure_state);
        //콘솔 결과 확인
        Debug.Log("success_state: " + success_state + " / failure_state: " + failure_state);
        //랜덤 숫자 재생성
        Start();
    }

    //홀수 버튼 클릭 시
    public void OddButtonClick()
    {
        if (randomNum % 2 != 0)
        {
            success_state = true;
            failure_state = false;
        }

        else
        {
            success_state = false;
            failure_state = true;
        }

        //이미지 출력
        Success.SetActive(success_state);
        Failure.SetActive(failure_state);
        //콘솔 결과 확인
        Debug.Log(randomNum + " / success_state: " + success_state + " / failure_state: " + failure_state);
        //랜덤 숫자 재생성
        Start();
    }
}

코드 설명

짝수, 홀수를 잘 판단하여 버튼을 클릭하면 성공이미지의 상태(success_state)를 true로 활성화해주고, 실패이미지의 상태(failure_state)를 false로 비활성화 해준다. 반대로 판단을 잘못한 경우에는 성공이미지 상태를 false, 실패이미지 상태를 true 해준다. SuccessSetActive(false) 이런 식으로 SetActive() 함수에 바로 bool 값을 넣어준다면 false를 다시 true 상태로 바꾸질 못한다. 따라서 상태를 나타내는 변수로 따로 만들어 상태를 바꾸었다.


그 다음 EventSystem의 인스펙터의 Success와 Failure에 하이어라키에 있는 success와 failure를 드래그 해준다.

그리고 결과를 확인해준다.