헝그리캣 - 게임 끝내기
★ 학습 목표 ★
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로 변경하여 시간이 흐르도록 한다는 의미이다. |