728x90
반응형
게임 매니저 오브젝트를 생성한 뒤 스크립트를 작성합니다.
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
// 게임 오버 상태를 표현하고, 게임 점수와 UI를 관리하는 게임 매니저
// 씬에는 단 하나의 게임 매니저만 존재할 수 있다.
public class GameManager : MonoBehaviour {
public static GameManager instance; // 싱글톤을 할당할 전역 변수
public bool isGameover = false; // 게임 오버 상태
public Text scoreText; // 점수를 출력할 UI 텍스트
public GameObject gameoverUI; // 게임 오버시 활성화 할 UI 게임 오브젝트
private int score = 0; // 게임 점수
// 게임 시작과 동시에 싱글톤을 구성
void Awake() {
// 싱글톤 변수 instance가 비어있는가?
if (instance == null)
{
// instance가 비어있다면(null) 그곳에 자기 자신을 할당
instance = this;
}
else
{
// instance에 이미 다른 GameManager 오브젝트가 할당되어 있는 경우
// 씬에 두개 이상의 GameManager 오브젝트가 존재한다는 의미.
// 싱글톤 오브젝트는 하나만 존재해야 하므로 자신의 게임 오브젝트를 파괴
Debug.LogWarning("씬에 두개 이상의 게임 매니저가 존재합니다!");
Destroy(gameObject);
}
}
void Update() {
if(isGameover &&Input.GetMouseButtonDown(0))
{
//게임오버 상태에서 마우스 왼쪽 버튼을 클릭하면 현재 씬 재시작
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}
}
// 점수를 증가시키는 메서드
public void AddScore(int newScore) {
//게임오버가 아니라면
if (!isGameover)
{
//점수를 증가
score += newScore;
scoreText.text = "Score : " + score;
}
}
// 플레이어 캐릭터가 사망시 게임 오버를 실행하는 메서드
public void OnPlayerDead() {
isGameover = true;
gameoverUI.SetActive(true);
}
}
GameManager의 OnPlayerDead() 메서드는 PlayerController 스크립트의 Die() 메서드에서 실행되어야 합니다.
그러니 PlayerController 스크립트의 Die() 메서드를 수정합니다.
private void Die() {
//애니메이터의 Die 트리거 파라미터를 셋
animator.SetTrigger("Die");
//오디오 소스에 할당된 오디오 클립을 deathClip으로 변경
playerAudio.clip = deathClip;
//사망 효과음 재생
playerAudio.Play();
//속도를 제로(0,0)로 변경
playerRigidbody.velocity = Vector2.zero;
//사망 상태를 true로 변경
isDead = true;
//게임 매니저의 게임오버 처리 실행
GameManager.instance.OnPlayerDead();
}
게임오버 실행은 이제 정상적으로 이루어지나
게임오버인 상태에서 발판과 배경이 멈추어야 합니다.
ScrollingObject 스크립트에서 GameManager의 isGameover을 검사하여 움직임 여부를 정하도록 수정합니다.
private void Update() {
//게임오버가 아니라면
if (!GameManager.instance.isGameover)
{
//초당 speed의 속도로 왼쪽으로 평행이동
transform.Translate(Vector3.left * speed * Time.deltaTime);
}
}
이제 ScrollingObject 스크립트는 매번 게임오버 상태를 검사하여 게임오버가 아닐 때만 실행상태를 유지합니다.
게임 매니저의 컴포넌트를 설정해줍니다.
실행해보면 게임오버 시 배경의 스크롤링이 멈춥니다.
그리고 게임오버 텍스트가 출력되며 다시 점프키(마우스 좌클릭)를 누르면 재시작됩니다.
728x90
반응형
'유니티 > 유니런(2D 러닝 게임)' 카테고리의 다른 글
유니런(7) - 씬 전환 (0) | 2021.09.01 |
---|---|
유니런(6) - 발판 반복 생성과 게임 완성 (0) | 2021.08.28 |
유니런(4) - UI (0) | 2021.08.08 |
유니런(3) - 배경 스크롤링 (0) | 2021.08.08 |
유니런(2) - 애니메이션 (0) | 2021.08.07 |