Unity에서 간단한 게임 관리자 만들기
Unity의 게임 관리자는 게임의 핵심 메커니즘과 논리를 감독하고 제어하는 중앙 스크립트 또는 시스템입니다. 일반적으로 게임 상태(예: 시작, 일시 정지, 종료), 플레이어 진행 상황, 점수, 레벨 및 글로벌 설정을 관리합니다. 게임 관리자는 프로젝트에서 깔끔한 구조를 보장하고 중복 코드를 피하는 데 필수적입니다. 이 튜토리얼에서는 게임 상태와 점수 추적을 처리하는 기본 게임 관리자를 만듭니다.
1단계: 장면 설정
시작하려면 간단한 Unity 장면을 준비하세요.
- 새로운 Unity 3D 프로젝트를 만듭니다.
- 지면을 위한 비행기와 게임플레이 요소를 위한 몇 가지 객체와 같은 기본 레벨 레이아웃을 추가합니다.
- 점수 등의 정보를 표시하기 위한 UI 캔버스를 만듭니다.
2단계: 게임 관리자 스크립트 생성
게임 관리자는 쉽게 접근할 수 있도록 싱글톤이 되며 게임 전체에서 인스턴스가 하나만 존재합니다. 스크립트를 작성해 보겠습니다.
- 프로젝트 패널에서 마우스 오른쪽 버튼을 클릭하고 Create > C# Script를 선택합니다. 이름을 GameManager로 지정합니다.
- 코드 편집기에서 스크립트를 열고 내용을 다음과 같이 바꾸세요.
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단계: 장면에 게임 관리자 추가
이제 게임 관리자를 장면에 추가해 보겠습니다.
- 계층 구조에 빈 GameObject를 만들고 GameManager라고 이름을 지정합니다.
- GameManager 스크립트를 GameObject로 끌어다 놓습니다.
- 씬에 중복된 GameManager GameObject가 없는지 확인하세요.
4단계: 게임플레이 로직 업데이트
게임 관리자를 사용하여 플레이어 상호작용을 처리해 보겠습니다. 예를 들어, 게임 관리자와 상호작용하도록 게임플레이 객체를 수정해 보겠습니다.
- 플레이어가 상호작용할 수 있는 객체에 대해 Target라는 새 스크립트를 만듭니다.
- 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단계: 점수 표시
플레이어에게 점수를 표시하려면:
- Canvas에 Text UI 요소를 만들고 이름을 ScoreText로 지정합니다.
- ScoreUI라는 새 스크립트를 만들어 Canvas에 첨부합니다.
- 다음 코드를 사용하여 점수 표시를 업데이트하세요.
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단계: 게임 관리자 테스트
게임 관리자를 테스트하려면:
- 장면을 실행하고 Target 스크립트를 사용하는 객체와 상호 작용합니다.
- 타겟과 상호작용할 때 UI에서 점수가 업데이트되는 것을 확인하세요.
- EndGame 메서드를 호출하여(예: 트리거나 버튼 사용) 게임을 종료하는 방법을 테스트합니다.
선택적 향상
다음 기능을 사용하여 게임 관리자의 기능을 확장할 수 있습니다.
- 레벨 관리: 새로운 레벨을 로드하거나 게임 종료 시 장면을 재설정합니다.
- 게임 타이머: 플레이어에게 도전하기 위해 카운트다운 타이머를 추가합니다.
- 진행 상황 저장: PlayerPrefs나 저장 시스템을 사용하여 플레이어 진행 상황을 저장하고 검색합니다.
- 일시 정지 메뉴: 게임을 멈추고 옵션을 표시하는 일시 정지 메뉴를 구현합니다.
결론
Unity에서 게임 상태와 점수 추적을 관리하는 간단한 게임 관리자를 만들었습니다. 게임 관리자는 핵심 로직을 중앙 집중화하여 프로젝트를 더 체계적이고 확장 가능하게 만듭니다. 추가 기능을 실험하여 게임 관리자를 게임의 필요에 맞게 조정하세요.