개발/게임 교육

[Unity class]게임 교육 17 - 미션 4

이게될까 2024. 1. 6. 15:07
728x90
728x90

미션 3이 마우스였다면 미션 4는 키보드이다.

미션 4 설정

위와 같이 설정해주고 나머지 그림도 다 바꾼다.

필요 없는 버튼 삭제

버튼 삭제 후 백그라운드 사진 크기에 맞춰 캔슬 버튼 위치도 옮겨 주었다.

그리고 버튼 생성!

그리고 한번에 정리하기 위해 백그라운드를 ctrl + D하여 새로 만들어준 뒤 이름을 Numbers로 바꾼다. 그 안에 있는것 들은 다 지우고, numbers 사진 지우고, 투명도를 0으로 만든뒤 백그라운드 안에 넣고, number들을 안에 넣는다. 사진으로 보면 편할 것이다.

요렇게 만들면 된다.

그리고 numbers에 하나만 추가해주면 번호들이 정리된다.

Grid Layout Group!

이거하나로 번호가 아래와 같이 된다.

뚝딱!

 

그리고 이제 다 번호를 넣어준다.

다 넣어줬으면 미션 1을 ctrl + D 하여 복사해준뒤 클래스명을 후딱 4로 바꿔서 미션 4 스크립트를 시작한다.

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

public class Mission4 : MonoBehaviour
{
    // 버튼을 가져오자
    public Transform numbers;

    Animator anim;
    PlayerCtrl playerCtrl_script;


    // Start is called before the first frame update
    void Start()
    {
        //getcomponent를 그냥 쓰면 안된다. 여기서 애니메이션은 하위 파일에 있다.
        anim = GetComponentInChildren<Animator>();

    }

    //미션 시작
    public void MissionStart()
    {
        anim.SetBool("IsUp", true);
        playerCtrl_script = FindObjectOfType<PlayerCtrl>();
       
        // 숫자 랜덤 배치
        for(int i = 0; i < 10; i++)
        {
            //전부다 섞인다.
            Sprite temp = numbers.GetChild(i).GetComponent<Image>().sprite;

            int rand = Random.Range(0,10);
            numbers.GetChild(i).GetComponent<Image>().sprite = numbers.GetChild(rand).GetComponent<Image>().sprite;
            numbers.GetChild(rand).GetComponent<Image>().sprite = temp;

        }
    }

    //x버튼 누르면 호출
    public void ClickCancle()
    {
        anim.SetBool("IsUp", false);
        playerCtrl_script.MissionEnd();
    }

    


    // 미션 성공하면 호출될 함수
    public void MissionSuccess()
    {
        ClickCancle();
    }
}

미션 4 스크립트이다. 랜덤으로 숫자를 앞에 배치해주는 것 말고는 특별한 것이 없다.
이제 퍼블릭에 넘버스 폴더!!! 넣어주고, 캔슬버튼에는 미션 4를 넣어준다.

실행하면 랜덤한 번호가 나온다.

이제 게임을 구현!

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

public class Mission4 : MonoBehaviour
{
    // 버튼을 가져오자
    public Transform numbers;
    public Color blue;
    Animator anim;
    PlayerCtrl playerCtrl_script;

    int count;
    // Start is called before the first frame update
    void Start()
    {
        //getcomponent를 그냥 쓰면 안된다. 여기서 애니메이션은 하위 파일에 있다.
        anim = GetComponentInChildren<Animator>();

    }

    //미션 시작
    public void MissionStart()
    {
        anim.SetBool("IsUp", true);
        playerCtrl_script = FindObjectOfType<PlayerCtrl>();
        // 모든 버튼의 색을 하얀색으로 초기화
        for(int i = 0; i < numbers.childCount; i++)
        {
            numbers.GetChild(i).GetComponent<Image>().color = Color.white;
            numbers.GetChild(i).GetComponent<Button>().enabled = true; // 버튼 초기화
        }

        // 숫자 랜덤 배치
        for(int i = 0; i < 10; i++)
        {
            //전부다 섞인다.
            Sprite temp = numbers.GetChild(i).GetComponent<Image>().sprite;

            int rand = Random.Range(0,10);
            numbers.GetChild(i).GetComponent<Image>().sprite = numbers.GetChild(rand).GetComponent<Image>().sprite;
            numbers.GetChild(rand).GetComponent<Image>().sprite = temp;

        }
        count = 1;
    }

    //x버튼 누르면 호출
    public void ClickCancle()
    {
        anim.SetBool("IsUp", false);
        playerCtrl_script.MissionEnd();
    }

    // 숫자 버튼 누르면 호출 될 함수
    public void ClickNumber()
    {
        if(count.ToString() == EventSystem.current.currentSelectedGameObject.GetComponent<Image>().sprite.name)
        {// 차례대로 숫자를 누를것인지 판단
            // 버튼 색 변경
            EventSystem.current.currentSelectedGameObject.GetComponent<Image>().color = blue; // 바꾸는게 생기면 초기화도 생각해야 한다.

            // 성공했으면 버튼 비활성화
            EventSystem.current.currentSelectedGameObject.GetComponent<Button>().enabled = false;//다신 누를 수 없게! 그럼 초기화도 !

            count++;

            // 성공 여부 체크
            if(count == 11)
            {
                Invoke("MissionSuccess",0.2f); // 0.2초뒤 실행 
            }
        }
    }


    // 미션 성공하면 호출될 함수
    public void MissionSuccess()
    {
        ClickCancle();
    }
}

여기도 딱히 어려운 것은 없다. 내가 올바른 버튼을 누르면 카운트가 올라가서 마지막 카운트가 되면 게임이 끝나는 것이다.

이어주는 것 꼭 까먹지 말기

이거 말고도 mission 4에서 색 정해주는 것도 있었다.

이제 순서대로 숫자 눌러주면 끝이다!.

끝!

728x90