📊 VR 게임 통계 요약 페이지 만들기 – 명중률, 발사 수, 플레이 시간, 점수 출력
Meta Quest / PCVR 대응
Unity XR Interaction Toolkit 기반
게임 종료 시 전체 플레이 데이터를 한눈에 보여주는 HUD 만들기
“사용자는 데이터를 보고 성장한다”
VR 게임에서 플레이어가 무엇을 잘했고,
무엇을 놓쳤는지 시각적으로 피드백을 받을 수 있다면,
다시 도전하고 싶은 마음이 생깁니다.
이번 튜토리얼에서는
- 게임 종료 시 자동으로 호출되는 통계 요약 화면을 만들고
- 점수, 정확도, 총 발사 수, 명중 수, 플레이 시간까지
한눈에 볼 수 있는 통계 UI를 구현합니다.
✅ 구현할 기능 요약
총 플레이 시간 표시 | Time.time 또는 게임 시작 ~ 종료 시간 계산 |
총 발사 수 / 명중 수 | 기존 AccuracyTracker 데이터 활용 |
명중률 (%) 계산 | (명중 수 ÷ 발사 수) × 100 |
최종 점수 표시 | ScoreManager.GetScore() |
모든 데이터를 UI에 출력 | 게임 종료 시 자동으로 표시되는 패널 구성 |
🛠️ Step 1. 통계 요약 UI 패널 만들기
- Canvas > Panel 생성
- 이름: StatsPanel
- 기본적으로 비활성화 상태 (SetActive(false))
- 내부에 TextMeshPro – Text 항목 5개 생성:
FinalScoreText | 최종 점수: 0점 |
TotalShotsText | 발사 횟수: 0 |
HitsText | 명중 수: 0 |
AccuracyText | 정확도: 0.0% |
PlayTimeText | 플레이 시간: 00:00 |
📄 Step 2. StatsManager 스크립트 생성
📄 StatsManager.cs
using UnityEngine;
using TMPro;
using System;
public class StatsManager : MonoBehaviour
{
public TextMeshProUGUI finalScoreText;
public TextMeshProUGUI totalShotsText;
public TextMeshProUGUI hitsText;
public TextMeshProUGUI accuracyText;
public TextMeshProUGUI playTimeText;
private float playStartTime;
public void BeginTracking()
{
playStartTime = Time.time;
}
public void ShowStats(int score, int shots, int hits)
{
float accuracy = shots > 0 ? (float)hits / shots * 100f : 0f;
float playTime = Time.time - playStartTime;
TimeSpan timeSpan = TimeSpan.FromSeconds(playTime);
string formattedTime = string.Format("{0:D2}:{1:D2}", timeSpan.Minutes, timeSpan.Seconds);
finalScoreText.text = $"최종 점수: {score}점";
totalShotsText.text = $"발사 횟수: {shots}";
hitsText.text = $"명중 수: {hits}";
accuracyText.text = $"정확도: {accuracy:F1}%";
playTimeText.text = $"플레이 시간: {formattedTime}";
}
}
🧷 Step 3. 게임 시작 & 종료 시점 연결
✅ 게임 시작 시
VRGameTimer.cs 또는 GameManager.cs에서 게임 시작 시 다음 코드 실행
statsManager.BeginTracking();
✅ 게임 종료 시
EndGame() 함수에 아래 코드 추가
statsManager.ShowStats(
scoreManager.GetScore(),
accuracyTracker.GetShotsFired(),
accuracyTracker.GetHits()
);
statsPanel.SetActive(true);
📌 AccuracyTracker.cs에 아래 함수들 추가
public int GetShotsFired() => shotsFired;
public int GetHits() => targetsHit;
✅ Step 4. 테스트 구조 정리
항목 확인
게임 시작 시 시간 기록 시작 ✅
게임 종료 시 통계 출력 ✅
UI에 정확한 수치 표시 ✅
모든 텍스트 정상 업데이트 ✅
💡 확장 아이디어
기능 설명
통계 공유 기능 통계 요약 화면을 이미지로 캡쳐해 저장
베스트 통계와 비교 최고 명중률 등과 비교하는 UI 구성
플레이 시간 제한 표시 3분 제한 등으로 경고 메시지 추가
바 형태의 정확도 시각화 Progress Bar 형태로 정확도 표현
📘 구조 예시
Canvas
└─ StatsPanel
├─ FinalScoreText
├─ TotalShotsText
├─ HitsText
├─ AccuracyText
└─ PlayTimeText
Scripts
├─ StatsManager.cs
├─ ScoreManager.cs
├─ AccuracyTracker.cs
└─ VRGameTimer.cs
📘 다음 튜토리얼 예고 – 18편
🔄 VR 게임 재시작 & 홈 화면 UI 구성하기
- 게임 종료 후 다시 시작 / 메인 메뉴 이동 버튼
- UI 전환 시스템 정리
- XR 환경에서 버튼 클릭 가능하게 구성
'VR 코딩 교육' 카테고리의 다른 글
Unity VR 튜토리얼 18편 (0) | 2025.07.19 |
---|---|
Unity VR 튜토리얼 16편 (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 |