Unity 기초

헝그리캣 - 게임 끝내기

맛밤도토리 2024. 2. 21. 12:47

★ 학습 목표 ★

1. 게임 종료 기능 만들기

2. GameManager 싱글톤 화 진행하기

3. 게임 종료 시점 만들기

4. 게임 다시 시작하기

 

 

 

1. 게임 종료 기능 만들기

1) 게임 종료 UI 세팅 하기

 ① Hierarchy 에서 UI Canvas 를 생성하고, 하위 오브젝트로 UI Image 를 생성한다. (Image 파일명 : retryBtn)

 ② retryBtn 에 Button Component 를 추가한다.

 ③ retryBtn 은 게임 종료 시에만 UI 가 활성화 되도록 Inspector 창에서 활성 상태를 체크 해제한다.

 

 

2) 게임 종료 버튼 작동 시키기

 : 게임 종료 버튼이 작동되기 위해서는 Script 를 작성해 줘야 한다.

 

[retryBtn C# Script]

public void ReGame()
{
    SceneManager.LoadScene("MainScene");
}

[설명]
SceneManager.LoadScene("MainScene");
: 버튼이 작동될 때, MainScene 을 로드하겠다는 의미이다.

 

 

: Script 를 모두 작성한 뒤, Unity 로 돌아와서 retryBtn Inspector 창에 retryBtn C# Script를 추가한다.

: On Click ( ) 에 retryBtn 을 추가해준다.

 

 

 

3) 게임 종료 버튼 UI 활성화 시키기

 : retryBtn GameObject 를 비활성화 상태로 시작했기 때문에, Script 를 작성하여 활성 상태로 변경해야한다.

 

[GameManager C# Script]

public void gameOver()
{
    retryBtn.SetActive(true);
    Time.timeScale = 0;
}

[설명]
retryBtn.SetActive(true);
: 게임오버가 될 경우, retryBtn UI 의 활성 상태를 true 로 변경하여 활성화 시켜준다는 의미이다.
Time.timeScale = 0;
: timeScale 을 0으로 설정하여, 게임 시간을 멈춘다는 의미이다.


※ timeScale 이란?
  : timeScale 은 시간을 빠르게 흐르게 할지, 느리게 흐르게 할지, 멈추게 할지를 결정하는 함수이다.
    (timeScale 값은 0이면 시간이 멈추게 되고 값이 높을 수록 시간이 빠르게 흘러 간다. 기본값은 1이다.)

 

 

 

2. GameManager 싱글톤 화 진행하기

 : GameManager 는 모든 Script 와 기능을 총괄하는 곳이기 때문에 반드시 1개만 만들어줘야 한다.

 

[GameManager C# Script]

public GameObject retryBtn;
public static gameManager I;

private void Awake()
{
    I = this;
}

[설명]
public static gameManager I;
: gamemanager 를 I라는 이름으로 사용하겠다는 의미이다.
I = this;
: 게임이 시작되기 전에 gameManager 를 this 로 선언하여 싱글톤화를 진행한다.

※ 이 때, void Start 에서 gameManager 싱글톤화를 해주게 되면,
    다른 스크립트의 Start 함수와의 충돌로 gameManager 가 작동하지 않을 수 있기 때문에
    반드시 Awake 에서 싱글톤화를 진행해준다.

 

 

 

3. 게임 종료 시점 구현하기

: 게임이 종료되기 위한 조건은 Script 를 작성해줘야한다.

 

[cat C# Script]

if (energy < full)
{
    transform.position += new Vector3(0, -0.007f, 0);    

    if (transform.position.y < -16f)
    {
        gameManager.I.gameOver();
    }
}

[설명]
if (transform.position.y < -16f)
: 만약 고양이의 위치(y값) 이 -16 보다 작다면
gameManager.I.gameOver();
: gameManager 에 있는 gameOver 함수를 실행시킨다.

 

 

 

4. 게임 다시 시작하기

: 게임 종료 시 시간을 멈춰버려서 게임이 다시 시작되면 시간이 다시 흐르도록 Script 를 작성해야 한다.

 

[GameManager C# Script]

void Start ()
{
    Time.timeScale = 1f;
}

[설명]
Time.timeScale = 1f;
: TimeScale 을 1로 변경하여 시간이 흐르도록 한다는 의미이다.