개발/게임 교육

[Unity] 게임 교육 14 - 미션 2

이게될까 2024. 1. 2. 17:45
728x90
728x90

쓰레기 버리기 미션이다.

시야에 방해가 된다면

미션 1 옆에 체크 표시를 풀면 모습이 보이지 않는다.
그러나 나중에 실행할 때 꼭 풀어서 실행해야 오류가 발생하지 않는다.(애니메이션을 통해 밑으로 내려가 있는 것이라 생성할 코드를 만들지 않았음)

미션 1을 control + D를 눌러 복제한후 아래와 같이 미션 2를 만들어준다.

요래하여 위치를 수정해주고, 콜라이드도 수정해준다.

필요없는 버튼은 다 삭제! 스크립트도 삭제한다.

그리고 그림도 넣으면 된다.

이제 다시 이미지 만들기

혹시 몰라서 한번 더 위치 알려주기
이런 형식으로 핸들을 만들었다.

이제 쓰레기가 저 핸들을 내리기 전 까지 나가지 못하도록 콜라이드 설정을 배경에서 해줘야 한다.

교수님 호출로 나중에 다시... 2:14

 

박스 콜라이드를 통해 양쪽 벽을 만든다. 바닥은 BackGround에서 만들지 않고 새로운 곳에서 만들겠다.(레버를 내리면 바닥도 사라져야 하므로)

Create Empty로 새로운 공간을 만든 후 여기에 콜라이드를 추가하여 바닥을 만들어 준다.
여기선 쓰레기통 공간을 만들어준다.

이제 이 안에 쓰레기를 넣는다. UI의 image로 넣는다.

5개의 쓰레기를 추가해줬다.

다들 콜라이드와 리지드바디를 추가해줬고, 이제 쓰레기 별로 콜라이드를 조절해야 한다.

이 쓰레기들도 캐릭터와 같이 스폰하기 위해 리소스 칸에 넣을 것이다. 쓰레기가 여러개이므로 폴더를 준비한다.

이렇게 하나하나 옮겨준다.

그리고 mission 1 스크립트에 control D를 눌러서 복제후 스크립트에 들어가서 클래스 명을 바꿔준다.

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

public class Mission2 : MonoBehaviour
{
    public Transform trash; 
    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 < trash.childCount; i++)
        { // 생성된 쓰레기 만큼
            Destroy(trash.GetChild(i).gameObject);

        }

        // 쓰레기 스폰
        for(int i = 0; i < 10; i++)
        {   
            // 사과
            GameObject trash4 =Instantiate(Resources.Load("Trash/Trash 4"),trash)as GameObject;
            trash4.GetComponent<RectTransform>().anchoredPosition = new Vector2(Random.Range(-180, 180), Random.Range(-180, 180)); // 위치 랜덤 지정
            trash4.GetComponent<RectTransform>().eulerAngles = new Vector3(0,0, Random.Range(0, 180)); // 각도 랜덤 지정

            // 캔
            GameObject trash5 = Instantiate(Resources.Load("Trash/Trash 5"), trash) as GameObject;
            trash5.GetComponent<RectTransform>().anchoredPosition = new Vector2(Random.Range(-180, 180), Random.Range(-180, 180)); // 위치 랜덤 지정
            trash5.GetComponent<RectTransform>().eulerAngles = new Vector3(0, 0, Random.Range(0, 180)); // 각도 랜덤 지정

        }        
        for(int i = 0; i < 3; i++)
        {   
            // 병
            GameObject trash1 =Instantiate(Resources.Load("Trash/Trash 1"),trash)as GameObject;
            trash1.GetComponent<RectTransform>().anchoredPosition = new Vector2(Random.Range(-180, 180), Random.Range(-180, 180)); // 위치 랜덤 지정
            trash1.GetComponent<RectTransform>().eulerAngles = new Vector3(0,0, Random.Range(0, 180)); // 각도 랜덤 지정

            // 생선
            GameObject trash2 = Instantiate(Resources.Load("Trash/Trash 2"), trash) as GameObject;
            trash2.GetComponent<RectTransform>().anchoredPosition = new Vector2(Random.Range(-180, 180), Random.Range(-180, 180)); // 위치 랜덤 지정
            trash2.GetComponent<RectTransform>().eulerAngles = new Vector3(0, 0, Random.Range(0, 180)); // 각도 랜덤 지정
            //비닐
            GameObject trash3 = Instantiate(Resources.Load("Trash/Trash 3"), trash) as GameObject;
            trash3.GetComponent<RectTransform>().anchoredPosition = new Vector2(Random.Range(-180, 180), Random.Range(-180, 180)); // 위치 랜덤 지정
            trash3.GetComponent<RectTransform>().eulerAngles = new Vector3(0, 0, Random.Range(0, 180)); // 각도 랜덤 지정

        }
    }

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


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

미션 2 script 본문 내용이다. 크게 어려운 내용은 없지만 까먹으면 안되는 것들이다.
이제 이 스크립트를 미션 2에 넣어줘야 한다.
그리고 캔슬 버튼, 트레쉬 등 스크립트에서 사용했던 퍼블릭들은 다 넣어줘야 한다.

쓰레기 등장

완성!

728x90