본문 바로가기
유니티/닷지 게임 만들기

Dodge Game 만들기 #5 - 점수판과 최고 점수 저장 시스템

by 찡사랑방 2024. 11. 19.
728x90
728x90

 

이번 포스팅에서는 플레이어가 자신의 성취를 확인하고 경쟁심을 느낄 수 있도록 **점수판(Leaderboard)**과 최고 점수 저장 시스템을 구현해 보겠습니다. 최고 점수 저장은 간단한 데이터 저장 방식을 활용하여 플레이어가 게임을 다시 실행해도 기록을 유지할 수 있도록 합니다.


1. 최고 점수 저장 시스템 구현

Unity에서는 간단한 데이터 저장을 위해 PlayerPrefs를 사용할 수 있습니다. 이를 활용해 최고 점수를 저장하고 불러오는 기능을 구현합니다.

1.1 ScoreManager에 최고 점수 추가

ScoreManager 스크립트를 수정하여 최고 점수를 저장 및 불러오는 기능을 추가합니다.

 

using UnityEngine;
using UnityEngine.UI;

public class ScoreManager : MonoBehaviour
{
    public int score = 0;       // 현재 점수
    public Text scoreText;      // 현재 점수 UI 텍스트
    public Text highScoreText;  // 최고 점수 UI 텍스트

    private int highScore;

    void Start()
    {
        // 최고 점수 불러오기
        highScore = PlayerPrefs.GetInt("HighScore", 0);
        UpdateScoreUI();
    }

    public void AddScore(int amount)
    {
        score += amount;
        UpdateScoreUI();
        CheckHighScore();
    }

    void CheckHighScore()
    {
        if (score > highScore)
        {
            highScore = score;
            PlayerPrefs.SetInt("HighScore", highScore); // 최고 점수 저장
        }
    }

    void UpdateScoreUI()
    {
        scoreText.text = "Score: " + score;
        highScoreText.text = "High Score: " + highScore;
    }
}

 

 

1.2 UI 업데이트

  1. Canvas에서 최고 점수를 표시할 텍스트를 추가합니다:
    • **Hierarchy > Create > UI > Text (TextMeshPro)**로 새 텍스트 오브젝트를 생성합니다.
    • 이름: HighScoreText
    • 텍스트 내용: "High Score: 0"
    • 위치는 화면 상단에 ScoreText 바로 아래에 배치합니다.
  2. ScoreManager 스크립트의 highScoreText 필드에 HighScoreText를 드래그하여 연결합니다.

2. 점수판(Leaderboard) 구현

2.1 점수판 UI 생성

  1. Canvas에 점수판을 위한 UI를 생성합니다:
    • Hierarchy > Create > UI > Panel을 선택하고 이름을 LeaderboardPanel로 설정합니다.
    • Panel은 기본적으로 비활성화(Inactive) 상태로 설정합니다.
  2. 점수 리스트를 표시할 텍스트를 추가합니다:
    • Panel 안에 여러 개의 **Text (TextMeshPro)**를 생성합니다.
    • 이름은 각각 Rank1Text, Rank2Text, ... 등으로 지정합니다.
    • 예시 텍스트 내용: "1. --- : 0", "2. --- : 0", ...
    • 필요에 따라 5~10개 정도 생성합니다.

2.2 LeaderboardManager 스크립트 작성

  1. Assets > Scripts 폴더에 LeaderboardManager.cs라는 새 스크립트를 생성합니다.
  2. 아래와 같이 작성합니다
using UnityEngine;
using UnityEngine.UI;

public class LeaderboardManager : MonoBehaviour
{
    public Text[] rankTexts; // 점수판에 표시할 텍스트 배열
    private int[] highScores;

    void Start()
    {
        highScores = new int[rankTexts.Length];
        LoadLeaderboard();
        UpdateLeaderboardUI();
    }

    public void AddNewScore(int score)
    {
        for (int i = 0; i < highScores.Length; i++)
        {
            if (score > highScores[i])
            {
                for (int j = highScores.Length - 1; j > i; j--)
                {
                    highScores[j] = highScores[j - 1];
                }
                highScores[i] = score;
                break;
            }
        }
        SaveLeaderboard();
        UpdateLeaderboardUI();
    }

    void LoadLeaderboard()
    {
        for (int i = 0; i < highScores.Length; i++)
        {
            highScores[i] = PlayerPrefs.GetInt($"HighScore{i + 1}", 0);
        }
    }

    void SaveLeaderboard()
    {
        for (int i = 0; i < highScores.Length; i++)
        {
            PlayerPrefs.SetInt($"HighScore{i + 1}", highScores[i]);
        }
    }

    void UpdateLeaderboardUI()
    {
        for (int i = 0; i < rankTexts.Length; i++)
        {
            rankTexts[i].text = $"{i + 1}. --- : {highScores[i]}";
        }
    }
}

 

2.3 LeaderboardManager 적용

  1. 새 빈 오브젝트(LeaderboardManager)를 생성하고, 위 스크립트를 추가합니다.
  2. Inspector에서 rankTexts 필드에 Rank1Text, Rank2Text 등의 텍스트 오브젝트를 배열로 연결합니다.
  3. ScoreManager가 점수를 갱신한 후 점수판에 새로운 점수를 추가하도록 설정합니다
void CheckHighScore()
{
    if (score > highScore)
    {
        highScore = score;
        PlayerPrefs.SetInt("HighScore", highScore);
    }

    LeaderboardManager leaderboard = FindObjectOfType<LeaderboardManager>();
    if (leaderboard != null)
    {
        leaderboard.AddNewScore(score);
    }
}

 

3. 테스트 및 조정

  1. Play 모드 실행
    • 게임 중 점수가 정상적으로 갱신되고, 최고 점수가 저장되는지 확인합니다.
    • 게임 종료 후 점수판에 새로운 기록이 추가되고 순서대로 정렬되는지 확인합니다.
  2. 밸런스 조정
    • 점수판의 크기(기록 수)를 조정합니다.
    • 높은 점수를 도달하기 어렵게 하거나, 점수를 더 많이 획득할 수 있는 적 또는 아이템을 추가합니다.

4. 다음 단계 예고

이번 포스팅에서는 최고 점수 저장 점수판 기능을 추가하여 플레이어가 자신의 성취를 확인하고 기록을 도전할 수 있도록 만들었습니다. 이로써 게임의 기본 기능은 완성되었습니다! 🎉
다음 포스팅에서는 게임 빌드 및 최종 테스트 과정을 다뤄, 게임을 실행 파일로 내보내는 방법과 최종 조정 팁을 소개하겠습니다.

완성까지 얼마 남지 않았습니다! 계속 함께해요! 🕹️

728x90