개발/게임 교육

[Unity]게임 교육 16 - 미션 3

이게될까 2024. 1. 6. 14:34
728x90
728x90

미션 1을 ctrl + D하여 3을 만든다.

미션 3은 랩실에 있을 예정이므로 랩으로 옮겨준다,

미션 3 설정

배경도 바꿔주었고, 마우스 사진의 콜라이더도 닿을 수 있는 부분으로 오프셋 수정도 하였다. 그리고 복붙한거기 때문에 있는 스크립트도 삭제하여주고, 필요없는 버튼들 삭제 후 캔슬버튼 위치만 옮겨주었다.

오른쪽과 같은 설정으로 text를 만든다.

UI의 text에서 오른쪽과 같은 설정으로 두개를 만들고, 검은 색은 포스트잇 위에, 흰색은 계산기 번호 판에 적어준다.

위 사진과 같이 버튼 10개를 만들어준다.

사진이 명확해 보이지 않아 하나 추가해준다.

이렇게 추가해주면 된다.

버튼 하나하나 수작업이다...

 

이렇게 델리트와 check 버튼도 추가해준다.

그 후 투명도를 전부 0으로 맞춰준다.

그리고 미션 1 스크립트를 복붙하여 미션 3스크립트로 만들어준다. 클래스명 바꾸는거 잊지 말기

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

public class Mission3 : MonoBehaviour
{
    public Text inputText;
    
    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>();
       
    }

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

    //숫자 버튼 누르면 호출
    public void ClickNumber()
    {
        if (inputText.text.Length <= 4)
        {//글자 수 길이 제한
            inputText.text += EventSystem.current.currentSelectedGameObject.name;
        }

    }


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

스크립트는 위에와 같다.

최대 5자리 이므로 더 입력을 못하게 막아놨다.

플레이 해보면 잘 된다.

이거 잊으면 안된다!

스크립트 하고 넣는거 까먹지 말기 clicknumber랑 버튼이랑 연결해줘야 한다.

이제 삭제버튼 만들기!

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

public class Mission3 : MonoBehaviour
{
    public Text inputText;
    
    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>();
       
    }

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

    //숫자 버튼 누르면 호출
    public void ClickNumber()
    {
        if (inputText.text.Length <= 4)
        {//글자 수 길이 제한
            inputText.text += EventSystem.current.currentSelectedGameObject.name;
        }

    }

    // 삭제 버튼 누르면 호출
    public void ClickDelete()
    {// input된 택스트가 있어야만 작동한다.
        if(inputText.text!= "")
        {
            inputText.text =inputText.text.Substring(0, inputText.text.Length - 1);
        }

    }

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

마지막을 날리는 코드!

그리고 델리트에 클릭 옵션도 추가!

이제 실행하면 잘 된다.

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

public class Mission3 : MonoBehaviour
{
    public Text inputText, keyCode;
    
    Animator anim;
    PlayerCtrl playerCtrl_script;


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

        // 키코드 랜덤
        for(int i = 0; i < 5; i++)
        {
            keyCode.text += Random.Range(0, 10); // 0 ~ 9 
        }
    }

    //미션 시작
    public void MissionStart()
    {
        anim.SetBool("IsUp", true);
        playerCtrl_script = FindObjectOfType<PlayerCtrl>();
       
    }

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

    //숫자 버튼 누르면 호출
    public void ClickNumber()
    {
        if (inputText.text.Length <= 4)
        {//글자 수 길이 제한
            inputText.text += EventSystem.current.currentSelectedGameObject.name;
        }

    }

    // 삭제 버튼 누르면 호출
    public void ClickDelete()
    {// input된 택스트가 있어야만 작동한다.
        if(inputText.text!= "")
        {
            inputText.text =inputText.text.Substring(0, inputText.text.Length - 1);
        }

    }

    // 체크 버튼 누르면 호출
    public void ClickCheck()
    {
        if (inputText.text == keyCode.text)
        {
            MissionSuccess();
        }
    }

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

 

이제 마지막으로 정답을 표현해줄 것을 처음에 만들어 주고, 초기화 해준뒤 정답시 꺼지는 것 만들어주면 성공!

시작하면 잘 된다!

근데 나는 왜 이전값이 남아있지?

// 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>();

        //초기화
        inputText.text = "";
        keyCode.text = "";

        // 키코드 랜덤
        for (int i = 0; i < 5; i++)
        {
            keyCode.text += Random.Range(0, 10); // 0 ~ 9 
        }
    }

초기화를 스타트에 넣을게 아니라 미션 스타트에 넣었어야 했다....

이제 잘 될 것이다.

코드 수정하니 잘 된다!

728x90