본문 바로가기

유니티 2D 기본(Platformer Game)

9. 스테이지 추가 & UI

Create Empty로 빈 오브젝트를 만들고 다른 오브젝트들을 안에 넣어줍니다.

타일맵 & 팔레트로 스테이지를 그려줍니다.

Stage1
Stage2
Stage3

 

깃발에 닿으면 현재 스테이지는 비활성화 되고, 다음 스테이지는 활성화 되는 방식입니다. 

게임매니저에서 배열과 인덱스 번호를 사용해 컨트롤합니다.

Stage오브젝트 맵핑

    public int stageIndex; stages 배열 인덱스로 사용
    public GameObject[] stages; //스테이지 맵핑
    
        public void nextStage()
    {
        if (stageIndex < 2) //스테이지가 1, 2일때 현재 스테이지 비활성화, 다음 스테이지 활성화
        {
            //Next Stage
            stages[stageIndex].SetActive(false);
            stageIndex++;
            stages[stageIndex].SetActive(true);
            playerRePosition();


            totalPoint += stagePoint;
            stagePoint = 0;
        }
        else { //스테이지가 3일때 화면 멈춤 & 게임 클리어!
            Time.timeScale = 0;
            Debug.Log("게임 클리어!");
        }
    }

플레이어 스크립트

public GameManager gm; //GameManager 맵핑
    
    void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.gameObject.tag == "Item")
        {
			/*
            ...
            */
        }else if(collision.gameObject.tag == "Finish")
        {
            //Next Stage
            gm.nextStage(); //gm의 함수 호출
        }
    }

 

 

 

UI 만들기

Button은 비활성화 시켜놓기

간단하게 라이프와 스테이지 넘버, 점수, Retry 버튼을 생성했습니다.

 

게임매니저 스크립트에서 불러오고 필요한 곳에 사용

    using UnityEngine.UI; //UI사용시 불러와야함
    using UnityEngine.SceneManagement; //Scene 관련 사용시 불러와야함
    //UI
    public Image [] uiHealth;
    public Text uiPoint;
    public Text uiStage;
    public GameObject uiRestartBtn; //버튼은 GameObject 타입으로 선언
    
    public void nextStage()
    {
        if (stageIndex < 2)
        {
            //Next Stage
            stages[stageIndex].SetActive(false);
            stageIndex++;
            stages[stageIndex].SetActive(true);
            playerRePosition();
            uiStage.text = "STAGE " + (stageIndex + 1); //스테이지 넘버 갱신


            totalPoint += stagePoint;
            stagePoint = 0;
        }
        else { //3스테이지까지 클리어시 Retry버튼에 Clear 문구 출력
            Time.timeScale = 0;
            Text btnText = uiRestartBtn.GetComponentInChildren<Text>(); //Btn 오브텍트 안에 Text오브젝트가 있기때문에 InChildren 사용
            btnText.text = "Clear!";
            uiRestartBtn.SetActive(true);
        }
    }
    
        public void restart() { //버튼에서 사용할 함수는 public으로 선언
        Time.timeScale = 1;
        SceneManager.LoadScene(0);
    }

 

버튼의 함수 정하기

 

결과

 

 

'유니티 2D 기본(Platformer Game)' 카테고리의 다른 글

더블점프 구현  (0) 2022.01.17
10. 사운드 출력  (0) 2021.12.04
8. 아이템 먹기  (0) 2021.12.03
7. 몬스터 밟아서 잡기  (0) 2021.12.03
6. 플레이어 피격 이벤트 구현  (0) 2021.11.30