GameDevelop/Unity기초쌓기

[Unity] EndPanel켜고 게임 다시시작 SetActive(),LoadScene()

도도돋치 2025. 3. 31. 18:20
Contents 접기
728x90

 

EndPanel 띄우기

이제 시간이 0인, 게임이 종료된 상태에서 EndPanel을 켜보자

마찬가지로 EndPanel오브젝트를 가져오기 위해 GameManager에 변수를 만들어준다.

public GameObject endPanel;

그리고 유니티에서 GameManager에 endPanel을 드래그 앤 드롭으로 넣어준다. 

지금은 endPanel이 보이지 않도록 꺼져있는데, 이를 게임이 종료되었을 때 나올 수 있도록 조절을 해야한다. 


endPanel이 켜지는 시점은 time이 0이 되는 시점이다. 따라서 totalTime이 0이 되었을 때 endPanel이 보이도록 해보자.

void Update()
{
    if (totalTime > 0)
    {
        totalTime -= Time.deltaTime;
    }
    else
    {
        totalTime = 0f;
        //totaltime이 0이되었을때 endPanel활성화(켜줌)
        endPanel.SetActive(true);
        Time.timeScale = 0f;
    }
    timeTxt.text = totalTime.ToString("N2");
}

 

endPanel.SetActive(true)를 해줌으로써, totalTime이 0이 되었을 때 endPanel이 화면에 띄워지게끔 할 수 있다.

 

endPanel을 통한 게임 다시 시작 

endPanel을 눌렀을 때 게임 다시 시작 기능을 구현하기 위해 RetryButton이라는 Script를 하나 만들어준다.

그리고 EndPanel의 AddComponet를 눌러 Button을 추가한다(RetryButtonX ButtonO)

 

RetryButton Script

 

RetryButton Script를 열어준 후 start와 update함수를 다 지워준 후, 아래의 패키지를 불러온다.

using UnityEngine.SceneManagement;
public class RetryButton : MonoBehaviour
{
    public void Retry()
    {
        SceneManager.LoadScene("MainScene");
    }
}

📌 MainScene을 불러오기 위해 SceneManager사용
📌 LoadScene("MainScene")은 "MainScene"이라는 이름의 Scene을 로드해줘라 라는 뜻 


이제 다시 시작 버튼을 눌렀을 때 Retry함수가 호출될 수 있게 Unity로 돌아간다.

 

우선 RetryButton 스크립트을 EndPanel에 추가한다.

 


EndPanel의 Button내 On Click()은, 버튼이 눌렸을 때 실행되는 것이다.

On Click아래의 +버튼을 눌러준다.


그리고 None부분에 EndPanel을 드래그 앤 드롭으로 넣어준다.


그러면 이렇게 No Function버튼이 활성화가 되어 아래 여러 메뉴창이 뜨는데, 

확인해보면 메뉴에는 EndPanel의 Inspector에 붙어있는 컴포넌트들의 이름이 있는 것을 확인 할 수 있다.

RetryButton > Retry()를 선택해준다.


순서는 EndPanel이 뜨고 다시 Main Scene이 로드되면서 게임이 처음부터 실행되는 것이다. 

더보기

*만약 다시시작 버튼을 눌렀는데도 MainScene이 로드되지않았을 경우

 

메뉴 상단 > File > Build Settings > Build Settings에 Scene/MainScene가 있는지 확인 > 만약 없다면 오른쪽 하단에 Add Open Scenes을 눌러 추가해준다. 


하지만 이렇게만 하면 Time.timeScale이 0이 된 상태라 시간이 멈춰있기 때문에, 다시 TimeScale을 1로 올려주는 작업이 필요하다.

GameManager의 Awake함수에 Time.timeScale = 1.0f를 추가해주자.

private void Awake()
{
    Instance = this;
    Time.timeScale = 1.0f;
}

 

 

이렇게 하면 다시시작버튼을 클릭시 게임이 재시작 되는 것을 확인할 수 있다!

결과화면

728x90