본문 바로가기

Project/우다다다 고영희

[우다다다 고영희] Unity: 게임 매니저 스크립트

728x90

이번에는 게임의 전반적인 흐름을 관리해줄 GameManager 스크립트이다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
 
public class GameManager : MonoBehaviour
{
    public static GameManager GM;
    public static int totalScore;
 
    public Text scoreText;
 
    public GameObject[] playerHealth;
    public int health;
    int maxHealth;
 
    public GameObject gameOverUI;
    public GameObject gameWinUI;
    bool isGameOver;
 
    void Awake()
    {
        if(GM == null)
        {
            GM = this;
        }
        else
        {
            Destroy(gameObject);
        }
 
        Time.timeScale = 1;
        totalScore = 0;
        isGameOver = false;
        maxHealth = health;
    }

 

  • GM - 모든 스크립트에서 GameManager를 수정할 수 있게 싱글톤으로 만들어준다.
  • totalScore - 전체 점수를 저장할 변수이다.
  • scoreText - totalScore를 UI에 보여줄 변수이다.
  • playerHealth - 플레이어의 생명 이미지를 UI에 보여줄 변수이다.
  • health - 플레이어의 현재 남은 생명에 대해 저장할 변수이다.
  • maxHealth - 플레이어의 최대 생명에 대해 저장할 변수이다.
  • gameOverUI - 게임 패배 시 활성화시켜줄 게임 종료 UI이다.
  • gameWinUI - 게임 승리시 활성활 시켜줄 게임 승리 UI이다.
  • isGameOver - 게임 패배 조건과 게임 승리 조건을 동시에 만족하는 것을 방지하는 변수이다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
void Update()
    {
        if (isGameOver)
        {
            if (Input.GetButton("Jump"))
            {
                SceneManager.LoadScene(0);
            }
        }
    }
 
    public void HelathDown()
    {
        health--;
        for (int i = 0; i < maxHealth; i++)
        {
            playerHealth[i].SetActive(false);
        }
 
        for (int i = 0; i < health; i++)
        {
            playerHealth[i].SetActive(true);
        }
 
        if(health <= 0 && !isGameOver)
        {
            GameOver();
            Time.timeScale = 0;
            isGameOver = true;
        }
    }

 

Update 함수는 게임이 종료되었을 때 스페이스 바를 누르면 게임을 다시 시작하게 해 준다.

 

HealthDown 함수는 플레이어의 생명을 1 감소시켜주고, 남은 플레이어의 생명에 맞게 UI에 있는 이미지를 전부 비활성화시켰다가 다시 활성화시켜준다. 그리고 만약 플레이어의 생명이 0 이하이고, 아직 게임이 종료되지 않았다면 GameOver를 실행시켜주고, 게임 시간은 멈추게 해준다. 그리고 isGameOver를 true로 바꿔주어서 Update 함수의 조건을 만족시키게 해준다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  public void AddScore(int score)
    {
        totalScore += score;
        scoreText.text = "Score: " + totalScore;
 
        if(totalScore >= 2000 && !isGameOver)
        {
            GameWinUI();
            Time.timeScale = 0;
            isGameOver = true;
        }
    }
 
    public void GameOver()
    {
        gameOverUI.SetActive(true);
    }
 
    public void GameWinUI()
    {
        gameWinUI.SetActive(true);
    }
}
 

 

AddScore 함수를 통해서 인자로 전달받은 score 만큼의 점수를 전체 스코어에 더해주고, UI에 표시해준다. 만약 totalScore가 2000을 넘고, 아직 게임이 종료되지 않았다면 GameWinUI 함수를 실행시키고, 게임 시간을 멈추게 해준다. 그리고 isGameOver를 true로 만들어준다.

 

GameOver 함수는 gameOverUI를 활성화 시켜준다.

GameWinUI 함수는 gameWinUI를 활성화 시켜준다.

728x90