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 업데이트
- Canvas에서 최고 점수를 표시할 텍스트를 추가합니다:
- **Hierarchy > Create > UI > Text (TextMeshPro)**로 새 텍스트 오브젝트를 생성합니다.
- 이름: HighScoreText
- 텍스트 내용: "High Score: 0"
- 위치는 화면 상단에 ScoreText 바로 아래에 배치합니다.
- ScoreManager 스크립트의 highScoreText 필드에 HighScoreText를 드래그하여 연결합니다.
2. 점수판(Leaderboard) 구현
2.1 점수판 UI 생성
- Canvas에 점수판을 위한 UI를 생성합니다:
- Hierarchy > Create > UI > Panel을 선택하고 이름을 LeaderboardPanel로 설정합니다.
- Panel은 기본적으로 비활성화(Inactive) 상태로 설정합니다.
- 점수 리스트를 표시할 텍스트를 추가합니다:
- Panel 안에 여러 개의 **Text (TextMeshPro)**를 생성합니다.
- 이름은 각각 Rank1Text, Rank2Text, ... 등으로 지정합니다.
- 예시 텍스트 내용: "1. --- : 0", "2. --- : 0", ...
- 필요에 따라 5~10개 정도 생성합니다.
2.2 LeaderboardManager 스크립트 작성
- Assets > Scripts 폴더에 LeaderboardManager.cs라는 새 스크립트를 생성합니다.
- 아래와 같이 작성합니다
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 적용
- 새 빈 오브젝트(LeaderboardManager)를 생성하고, 위 스크립트를 추가합니다.
- Inspector에서 rankTexts 필드에 Rank1Text, Rank2Text 등의 텍스트 오브젝트를 배열로 연결합니다.
- ScoreManager가 점수를 갱신한 후 점수판에 새로운 점수를 추가하도록 설정합니다
void CheckHighScore()
{
if (score > highScore)
{
highScore = score;
PlayerPrefs.SetInt("HighScore", highScore);
}
LeaderboardManager leaderboard = FindObjectOfType<LeaderboardManager>();
if (leaderboard != null)
{
leaderboard.AddNewScore(score);
}
}
3. 테스트 및 조정
- Play 모드 실행
- 게임 중 점수가 정상적으로 갱신되고, 최고 점수가 저장되는지 확인합니다.
- 게임 종료 후 점수판에 새로운 기록이 추가되고 순서대로 정렬되는지 확인합니다.
- 밸런스 조정
- 점수판의 크기(기록 수)를 조정합니다.
- 높은 점수를 도달하기 어렵게 하거나, 점수를 더 많이 획득할 수 있는 적 또는 아이템을 추가합니다.
4. 다음 단계 예고
이번 포스팅에서는 최고 점수 저장과 점수판 기능을 추가하여 플레이어가 자신의 성취를 확인하고 기록을 도전할 수 있도록 만들었습니다. 이로써 게임의 기본 기능은 완성되었습니다! 🎉
다음 포스팅에서는 게임 빌드 및 최종 테스트 과정을 다뤄, 게임을 실행 파일로 내보내는 방법과 최종 조정 팁을 소개하겠습니다.
완성까지 얼마 남지 않았습니다! 계속 함께해요! 🕹️
728x90
'유니티 > 닷지 게임 만들기' 카테고리의 다른 글
Dodge Game 만들기 #6 - 게임 빌드 및 최종 조정 (2) | 2024.11.20 |
---|---|
Dodge Game 만들기 #4 - 점수 시스템과 아이템 추가 (1) | 2024.11.18 |
Dodge Game 만들기 #3 - 충돌 처리와 플레이어 체력 시스템 (0) | 2024.11.17 |
Dodge Game 만들기 #2- 적 오브젝트 생성과 플레이어 추적 (3) | 2024.11.16 |
Dodge Game 만들기 #1 - 기본 게임설정과 플레이어 이동 (0) | 2024.11.14 |