Unity에서 간단한 게임 관리자 만들기

Unity의 게임 관리자는 게임의 핵심 메커니즘과 논리를 감독하고 제어하는 ​​중앙 스크립트 또는 시스템입니다. 일반적으로 게임 상태(예: 시작, 일시 정지, 종료), 플레이어 진행 상황, 점수, 레벨 및 글로벌 설정을 관리합니다. 게임 관리자는 프로젝트에서 깔끔한 구조를 보장하고 중복 코드를 피하는 데 필수적입니다. 이 튜토리얼에서는 게임 상태와 점수 추적을 처리하는 기본 게임 관리자를 만듭니다.

1단계: 장면 설정

시작하려면 간단한 Unity 장면을 준비하세요.

  1. 새로운 Unity 3D 프로젝트를 만듭니다.
  2. 지면을 위한 비행기와 게임플레이 요소를 위한 몇 가지 객체와 같은 기본 레벨 레이아웃을 추가합니다.
  3. 점수 등의 정보를 표시하기 위한 UI 캔버스를 만듭니다.

2단계: 게임 관리자 스크립트 생성

게임 관리자는 쉽게 접근할 수 있도록 싱글톤이 되며 게임 전체에서 인스턴스가 하나만 존재합니다. 스크립트를 작성해 보겠습니다.

  1. 프로젝트 패널에서 마우스 오른쪽 버튼을 클릭하고 Create > C# Script를 선택합니다. 이름을 GameManager로 지정합니다.
  2. 코드 편집기에서 스크립트를 열고 내용을 다음과 같이 바꾸세요.
using UnityEngine;

public class GameManager : MonoBehaviour
{
    public static GameManager Instance; // Singleton instance

    public int score = 0; // Player's score
    public bool isGameActive = true; // Is the game running?

    void Awake()
    {
        // Ensure there is only one instance of GameManager
        if (Instance == null)
        {
            Instance = this;
            DontDestroyOnLoad(gameObject); // Persist across scenes
        }
        else
        {
            Destroy(gameObject); // Destroy duplicate instances
        }
    }

    // Method to increase the score
    public void AddScore(int points)
    {
        if (isGameActive)
        {
            score += points;
            Debug.Log("Score: " + score);
        }
    }

    // Method to end the game
    public void EndGame()
    {
        isGameActive = false;
        Debug.Log("Game Over!");
        // Additional logic to handle game over, like displaying UI
    }
}

3단계: 장면에 게임 관리자 추가

이제 게임 관리자를 장면에 추가해 보겠습니다.

  1. 계층 구조에 빈 GameObject를 만들고 GameManager라고 이름을 지정합니다.
  2. GameManager 스크립트를 GameObject로 끌어다 놓습니다.
  3. 씬에 중복된 GameManager GameObject가 없는지 확인하세요.

4단계: 게임플레이 로직 업데이트

게임 관리자를 사용하여 플레이어 상호작용을 처리해 보겠습니다. 예를 들어, 게임 관리자와 상호작용하도록 게임플레이 객체를 수정해 보겠습니다.

  1. 플레이어가 상호작용할 수 있는 객체에 대해 Target라는 새 스크립트를 만듭니다.
  2. Target 스크립트에 다음 코드를 사용하세요.
using UnityEngine;

public class Target : MonoBehaviour
{
    public int pointValue = 10; // Points awarded for interacting with this target

    void OnMouseDown()
    {
        if (GameManager.Instance.isGameActive)
        {
            // Add points to the score
            GameManager.Instance.AddScore(pointValue);

            // Destroy the target
            Destroy(gameObject);
        }
    }
}

이 스크립트는 플레이어가 객체를 클릭하여 상호작용한다고 가정합니다. 충돌이나 트리거와 같은 게임의 메커니즘에 맞게 조정할 수 있습니다.

5단계: 점수 표시

플레이어에게 점수를 표시하려면:

  1. Canvas에 Text UI 요소를 만들고 이름을 ScoreText로 지정합니다.
  2. ScoreUI라는 새 스크립트를 만들어 Canvas에 첨부합니다.
  3. 다음 코드를 사용하여 점수 표시를 업데이트하세요.
using UnityEngine;
using UnityEngine.UI;

public class ScoreUI : MonoBehaviour
{
    public Text scoreText;

    void Update()
    {
        if (GameManager.Instance != null)
        {
            scoreText.text = "Score: " + GameManager.Instance.score;
        }
    }
}

ScoreText UI 요소를 Inspector의 ScoreText 필드로 끌어다 놓습니다.

6단계: 게임 관리자 테스트

게임 관리자를 테스트하려면:

  1. 장면을 실행하고 Target 스크립트를 사용하는 객체와 상호 작용합니다.
  2. 타겟과 상호작용할 때 UI에서 점수가 업데이트되는 것을 확인하세요.
  3. EndGame 메서드를 호출하여(예: 트리거나 버튼 사용) 게임을 종료하는 방법을 테스트합니다.

선택적 향상

다음 기능을 사용하여 게임 관리자의 기능을 확장할 수 있습니다.

  • 레벨 관리: 새로운 레벨을 로드하거나 게임 종료 시 장면을 재설정합니다.
  • 게임 타이머: 플레이어에게 도전하기 위해 카운트다운 타이머를 추가합니다.
  • 진행 상황 저장: PlayerPrefs나 저장 시스템을 사용하여 플레이어 진행 상황을 저장하고 검색합니다.
  • 일시 정지 메뉴: 게임을 멈추고 옵션을 표시하는 일시 정지 메뉴를 구현합니다.

결론

Unity에서 게임 상태와 점수 추적을 관리하는 간단한 게임 관리자를 만들었습니다. 게임 관리자는 핵심 로직을 중앙 집중화하여 프로젝트를 더 체계적이고 확장 가능하게 만듭니다. 추가 기능을 실험하여 게임 관리자를 게임의 필요에 맞게 조정하세요.