Unity/베어유 : 어몽어스 개발 노트

[17강] 미니게임 미션 만들기 : 숫자 순서대로 누르기

서니션 2023. 1. 19. 17:21
728x90
반응형

키보드 Mission4 두고 콜라이더 왼쪽으로 옮겨주기

 

Grid Layout Group으로 정렬해줌

 

// 미션 시작
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;
    }
}

랜덤으로 정렬해주기 위한 스크립트 작성

 

Mission4 스크립트

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

public class Mission4 : MonoBehaviour
{
    public Transform numbers;
    // 한꺼번에 묶어놨던 numbers의 자식들을 사용
    public Color blue;
    
    Animator anim;
    PlayerCtrl playerCtrl_script;

    int count;
    void Start()
    {
        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;
    }
    
    // 엑스버튼 누르면 호출
    public void MissionCancle()
    {
        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);
            }
        }
    }
    // 미션 성공하면 호출
    public void MissionSuccess()
    {
        MissionCancle();
    }
}

 

확인 영상

 


오늘도 미니게임 미션 만들기 강의 잘 들었고 재미있었다

컴포넌트를 불러오는 줄이 길어서 위에 정의하고 작성했으면 좀 더 간단하게 작성할 수 있지 않았을까 싶다

혼자 수정해봐야겠다!

728x90
반응형