Unity 게임 오버 및 점수 시스템
2024. 12. 9. 08:26ㆍUnity
Unity 게임 오버 및 점수 시스템 구현하기
게임의 점수 시스템과 게임 오버 처리는 플레이어 경험의 핵심 요소입니다.
점수 시스템은 플레이어의 진행 상황을 시각적으로 제공하며, 게임 오버는 도전과 동기를 부여하는 중요한 부분입니다.
이번 포스팅에서는 Unity에서 점수와 게임 오버 시스템을 구현하는 방법을 단계적으로 알아보겠습니다.
1. 점수 시스템 설계
1) 점수 변수 추가
public int score = 0; // 현재 점수
2) 점수 업데이트 로직
void AddScore(int points)
{
score += points;
UpdateScoreUI();
}
3) UI에 점수 표시
Unity의 TextMeshPro 또는 UI Text를 활용하여 점수를 표시합니다.
- Canvas 추가
- Unity에서 GameObject > UI > Canvas를 선택하여 캔버스를 생성합니다.
- Text 추가
- 캔버스에 텍스트 오브젝트를 추가하고, 이름을 ScoreText로 설정합니다.
4) UI 업데이트 코드
using UnityEngine;
using TMPro;
public class ScoreManager : MonoBehaviour
{
public TextMeshProUGUI scoreText; // UI 텍스트
private int score = 0;
public void AddScore(int points)
{
score += points;
scoreText.text = "Score: " + score;
}
}
5) 점수 증가 이벤트 연결
예를 들어, 플레이어가 적을 처치하거나 아이템을 획득할 때 점수를 추가합니다.
void OnTriggerEnter2D(Collider2D collision)
{
if (collision.CompareTag("Collectible"))
{
AddScore(10); // 점수 추가
Destroy(collision.gameObject);
}
}
2. 게임 오버 시스템 설계
1) 게임 오버 상태 관리
private bool isGameOver = false;
void GameOver()
{
isGameOver = true;
Time.timeScale = 0f; // 게임 정지
ShowGameOverUI();
}
2) 게임 오버 UI 생성
- Canvas에 Panel 추가.
- 패널에 Game Over 텍스트와 버튼을 추가하여 게임 오버 화면을 구성합니다.
3) 게임 오버 UI 제어
public GameObject gameOverPanel;
void ShowGameOverUI()
{
gameOverPanel.SetActive(true);
}
4) 게임 오버 조건 추가
void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.CompareTag("Enemy"))
{
GameOver();
}
}
3. 다시 시작 및 종료 기능
1) 다시 시작 버튼
- Button UI를 추가하고 Restart로 이름을 설정합니다.
- 버튼 클릭 이벤트에 아래 코드를 연결합니다.
using UnityEngine.SceneManagement;
public void RestartGame()
{
Time.timeScale = 1f; // 게임 속도 재설정
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}
2) 게임 종료 버튼
- 버튼을 추가하고 Quit로 이름을 설정합니다.
- 버튼 클릭 이벤트에 아래 코드를 연결합니다.
public void QuitGame()
{
Application.Quit();
}
4. 점수와 게임 오버 시스템 통합
1) GameManager 스크립트 생성
using UnityEngine;
using UnityEngine.SceneManagement;
using TMPro;
public class GameManager : MonoBehaviour
{
public TextMeshProUGUI scoreText;
public GameObject gameOverPanel;
private int score = 0;
private bool isGameOver = false;
void Start()
{
Time.timeScale = 1f; // 게임 속도 초기화
gameOverPanel.SetActive(false);
}
public void AddScore(int points)
{
if (isGameOver) return;
score += points;
scoreText.text = "Score: " + score;
}
public void GameOver()
{
isGameOver = true;
Time.timeScale = 0f;
gameOverPanel.SetActive(true);
}
public void RestartGame()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}
public void QuitGame()
{
Application.Quit();
}
}
2) 적 오브젝트와 연동
- 적 오브젝트에서 GameManager.AddScore()를 호출하여 점수를 추가합니다.
- 플레이어가 적과 충돌하면 GameManager.GameOver()를 호출합니다.
5. 추가 기능
1) 최고 점수 저장
PlayerPrefs를 사용하여 최고 점수를 저장합니다.
void SaveHighScore()
{
int highScore = PlayerPrefs.GetInt("HighScore", 0);
if (score > highScore)
{
PlayerPrefs.SetInt("HighScore", score);
}
}
2) 시간 제한 추가
- 점수와 별개로 제한 시간을 설정해 게임의 긴장감을 높일 수 있습니다.
6. 요약
Unity에서 점수와 게임 오버 시스템은 간단한 구조로 구현 가능하며, 다음 기능을 포함합니다:
- 점수 시스템: 점수를 관리하고 UI에 표시.
- 게임 오버 처리: 충돌 감지와 UI 제어.
- 재시작 및 종료 버튼: 플레이어의 선택 기능 제공.
'Unity' 카테고리의 다른 글
Unity 3D 캐릭터 컨트롤러 구현 (0) | 2024.12.12 |
---|---|
Unity 3D 모델 가져오기 및 셰이더 (0) | 2024.12.10 |
Unity 2D 캐릭터 컨트롤러 구현 (0) | 2024.12.09 |
Unity 2D 스프라이트 및 애니메이션 (0) | 2024.11.29 |
Unity 충돌 감지 및 트리거 (0) | 2024.11.28 |