Menu
CoddyTech

하나의 스크립트로 게임 실행하기

Coddy Unity 여정의 실제 게임 만들기 섹션에 포함된 레슨. 60개 중 12번째.

점수는 플레이어 스크립트에, 목숨은 체력 스크립트에, 게임 종료 확인은 세 번째 스크립트에 넣으면 각 스크립트에 다른 스크립트의 숫자가 필요하므로, 새로운 규칙을 추가할 때마다 여러 파일을 수정해야 합니다. Unity 게임에서는 보통 그 숫자를 비어 있는 GameObject에 붙인 하나의 스크립트인 GameManager에 맡깁니다. 이 스크립트가 점수와 목숨, 게임을 끝내는 규칙을 관리합니다. 다른 스크립트는 공개 메서드를 호출해 발생한 일만 보고합니다. 이 페널티 슛아웃에서는 골대가 골이 들어갈 때마다 보고합니다:

public class GameManager : MonoBehaviour
{
    private int goals;
    private int shotsLeft = 5;

    public void ShotTaken(bool scored)
    {
        if (shotsLeft == 0) return;
        shotsLeft--;
        if (scored) goals++;
        Debug.Log("Goals: " + goals + ", shots left: " + shotsLeft);
        if (shotsLeft == 0) Debug.Log("Full time: " + goals + " goals");
    }
}
// Net.cs, 골의 트리거에서
public GameManager game;

void OnTriggerEnter(Collider other)
{
    if (other.CompareTag("Ball")) game.ShotTaken(true);
}

골대는 남은 슛이 몇 번인지, 언제 게임이 끝나는지 알지 못합니다. 골이 들어갔다고 보고하면 매니저가 그 의미를 결정합니다. 골키퍼 스크립트는 game.ShotTaken(false)를 사용해 선방을 보고합니다. 슛이 3번인 승부차기로 바꾸려면 스크립트 하나에서 숫자 하나만 바꾸면 됩니다. ShotTaken 맨 위의 확인은 경기 종료 후 굴러 들어온 공이 득점으로 처리되는 것을 막습니다.

인스펙터에서 GameManager 오브젝트를 game 필드에 끌어다 놓으면 Unity가 해당 오브젝트에서 GameManager 스크립트를 찾습니다. 매니저는 HUD를 관리하는 곳이기도 합니다. 점수 텍스트와 게임 오버 패널을 매니저가 가지고 있으면 숫자가 바뀌는 메서드에서 화면도 함께 바뀌므로, 다른 스크립트는 UI를 건드리지 않습니다.

challenge icon

챌린지

쉬움

GameManager가 점수와 생명 수를 관리하도록 하세요.

  1. AddScore(int points): gameOver가 아닌 경우 score에 점수를 더하고 scoreText에 Score: 6을 표시하세요.
  2. LoseLife(): lives에서 1을 빼고 Lives: 2를 표시하세요. 0이 되면 gameOver를 설정하고 gameOverPanel을 표시한 다음 player.enabled = false로 설정하세요.
  3. Gem과 Bomb에서 other.CompareTag("Player")인 경우 game.AddScore(points) 또는 game.LoseLife()를 호출한 다음 Destroy(gameObject)를 호출하세요.

‘플레이’를 누르고 폭탄 세 개에 맞으세요. 그런 다음 ‘확인’을 누르세요.

직접 해보기

using UnityEngine;
using TMPro;

public class GameManager : MonoBehaviour
{
    public TMP_Text scoreText;
    public TMP_Text livesText;
    public GameObject gameOverPanel;
    public Player player;
    private int score;
    private int lives = 3;
    private bool gameOver;

    public void AddScore(int points)
    {
        // 게임이 끝나지 않았다면 점수를 더하고 새 점수를 표시한다
    }

    public void LoseLife()
    {
        // 목숨을 하나 줄이고 남은 목숨을 표시한다. 목숨이 0개가 되면 게임이 끝난다
    }
}

실제 게임 만들기의 모든 레슨

직접 연습해 보세요: Unity 플레이그라운드