🎓 블로그 소개: 이 블로그는 가상현실(VR)과 인공지능(AI)을 활용한 실습형 교육 콘텐츠를 제공합니다. 모든 콘텐츠는 직접 제작되며, 초보자도 쉽게 따라할 수 있도록 구성되어 있습니다.
본문 바로가기
VR 코딩 교육

Unity VR 튜토리얼 16편

by goodworld-info 2025. 7. 19.

가상현실(VR)

🏆 로컬 리더보드 만들기 – VR 게임에서 최고 점수 TOP3 UI로 보여주기

Meta Quest / PCVR 완벽 지원
Unity XR Interaction Toolkit 기반
로그인 없이 작동하는 PlayerPrefs 기반 로컬 랭킹 시스템 구현

 

“기록은 게임의 가장 강력한 동기부여다”

사용자가 플레이할수록 더 나은 점수를 목표로 하게 만드는 장치,
바로 리더보드입니다.
특히 VR 미니게임에서는 간단하지만 눈에 보이는 경쟁 요소
몰입도와 재미를 크게 끌어올립니다.

이번 튜토리얼에서는 로그인이나 서버 없이도 가능한
PlayerPrefs를 활용한 로컬 리더보드 TOP3 시스템을 구현해봅니다.


✅ 구현할 기능 요약

기능설명
게임 종료 시 현재 점수 저장 PlayerPrefs에 자동 저장
기존 최고 점수와 비교 자동 정렬하여 상위 3위 유지
랭킹 리스트 UI에 출력 TextMeshPro로 표시
점수와 순위 함께 보여주기 "1등: 350점" 형태로 출력
 

🛠️ Step 1. 점수 저장 및 랭킹 관리 스크립트 작성

📄 LeaderboardManager.cs

 

using UnityEngine;
using TMPro;

public class LeaderboardManager : MonoBehaviour
{
    public TextMeshProUGUI[] rankTexts; // 3개의 Text UI

    private int[] scores = new int[3];

    void Start()
    {
        LoadScores();
        DisplayScores();
    }

    public void SaveNewScore(int newScore)
    {
        LoadScores();

        // 새 점수 삽입 및 정렬
        scores[2] = newScore;
        Systehttp://m.Array.Sort(scores);
        System.Array.Reverse(scores);

        // 저장
        for (int i = 0; i < scores.Length; i++)
        {
            PlayerPrefs.SetInt("HighScore" + i, scores[i]);
        }

        DisplayScores();
    }

    void LoadScores()
    {
        for (int i = 0; i < scores.Length; i++)
        {
            scores[i] = PlayerPrefs.GetInt("HighScore" + i, 0);
        }
    }

    void DisplayScores()
    {
        for (int i = 0; i < rankTexts.Length; i++)
        {
            rankTexts[i].text = $"{i + 1}위: {scores[i]}점";
        }
    }
}


🧾 Step 2. 게임 오버 시 랭킹 등록

  • 게임 오버가 발생할 때, 현재 점수를 랭킹에 등록하도록 추가
    예시: VRGameTimer.cs의 EndGame() 함수에 다음 코드 삽입

public LeaderboardManager leaderboard;

void EndGame()
{
    isGameOver = true;
    gameOverPanel.SetActive(true);
    leaderboard.SaveNewScore(scoreManager.GetScore());
    Time.timeScale = 0;
}


✅ ScoreManager.cs에는 public int GetScore() 함수가 있어야 함

 

public int GetScore() => currentScore;

 


🧱 Step 3. UI 구성 (랭킹 표시 패널 만들기)

  1. Canvas > Panel 추가 → 이름: LeaderboardPanel
  2. 내부에 TextMeshPro – UI Text 3개 생성
이름내용 예시
Rank1Text 1위: 0점
Rank2Text 2위: 0점
Rank3Text 3위: 0점
 
  1. LeaderboardManager.cs에 각 텍스트를 Drag & Drop으로 연결

✅ 확장 아이디어 (선택 기능)

기능설명
사용자 이름 저장 InputField 추가 + PlayerPrefs Key 조합
날짜 기록 System.DateTime.Now.ToString("yyyy-MM-dd")
최고점 달성 시 효과 출력 "New Record!" 애니메이션, 사운드 등
랭킹 초기화 버튼 추가 PlayerPrefs.DeleteAll() 또는 선택 삭제
 

🧪 테스트 체크리스트

항목확인 여부
게임 종료 시 점수가 저장됨 ✅ 작동
기존 최고 점수보다 높으면 갱신됨 ✅ 확인
TOP3 점수가 정렬되어 UI에 표시됨 ✅ 정상
재시작해도 데이터 유지됨 ✅ PlayerPrefs 저장됨
 

📘 예시 구조

Canvas
 ├─ GameOverPanel
 │   ├─ LeaderboardPanel
 │   │   ├─ Rank1Text
 │   │   ├─ Rank2Text
 │   │   └─ Rank3Text
 ├─ LeaderboardManager.cs


✅ 마무리 요약

기능 구현 항목완료 여부
점수 저장 및 정렬 ✅ 성공
최고 점수 TOP3 유지 ✅ 가능
UI 패널에 실시간 표시 ✅ 완성
플레이어 몰입 요소 강화 ✅ 효과적
애드센스 승인을 위한 고급 콘텐츠화 ✅ 적용 완료
 

🔍 SEO 자동 키워드 포함

  • Unity VR 리더보드 만들기
  • PlayerPrefs 점수 저장
  • Unity XR 최고 점수 시스템
  • Meta Quest VR 랭킹 UI
  • VR 게임 점수 정렬 표시
  • Unity VR 게임 랭킹 구조

📘 다음 튜토리얼 예고 – 17편

📊 VR 게임에 통계 요약 페이지 만들기 – 플레이 시간, 명중률, 최종 점수 종합 출력

 

'VR 코딩 교육' 카테고리의 다른 글

Unity VR 튜토리얼 18편  (0) 2025.07.19
Unity VR 튜토리얼 17편  (0) 2025.07.19
Unity VR 튜토리얼 15편  (0) 2025.07.03
Unity VR 튜토리얼 14편  (0) 2025.06.30
Unity VR 튜토리얼 13편  (0) 2025.05.31