재시작과 최고 점수: PlayerPrefs로 로컬 기록 저장하기
16강. 재시작과 최고 점수: PlayerPrefs로 로컬 기록 저장하기
1. 이번 강의에서 해결할 문제
게임 오버 뒤 새 Run을 시작하면 이전 택배·점수·구독이 남거나 최고 점수가 사라집니다. 민감하지 않은 최고 점수만 로컬에 저장하고 Scene 상태를 초기화합니다.
2. 학습 목표
3. 핵심 개념
PlayerPrefs는 간단한 로컬 설정·기록을 저장하지만 암호화된 보안 저장소가 아닙니다. 최고 점수와 음량에는 사용할 수 있지만 비밀번호, 토큰, 결제·개인정보는 절대 저장하지 않습니다. 잦은 Save()는 플레이 중 끊김을 만들 수 있어 결과가 확정된 시점에 호출합니다.
4. 단계별 실습
C# · 파일 경로: Assets/_Project/Scripts/Core/HighScoreStore.cs
using UnityEngine;
namespace DeliverySorter.Core
{
public sealed class HighScoreStore : MonoBehaviour
{
private const string Key = "delivery-sorter-high-score-v1";
public int Value { get; private set; }
private void Awake() => Value = PlayerPrefs.GetInt(Key, 0);
public bool SaveIfHigher(int score)
{
if (score <= Value) return false;
Value = score;
PlayerPrefs.SetInt(Key, Value);
PlayerPrefs.Save();
return true;
}
}
}
C# · GameFlowController.cs에 추가
using UnityEngine.SceneManagement;
[SerializeField] private HighScoreStore highScoreStore;
private void GameOver()
{
highScoreStore.SaveIfHigher(session.Score);
input.SetInputEnabled(false);
spawner.Stop();
Time.timeScale = 1f;
SetState(GameState.GameOver);
}
public void RestartRun()
{
Time.timeScale = 1f;
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
}
Unity Editor·Inspector 작업: HighScoreStore GameObject를 만들고 Flow에 연결합니다. GameOverPanel의 Restart Button을 RestartRun에 연결하고 Highest TMP_Text는 Store 값을 표시합니다.
테스트 작업: 100점 저장, 50점 종료, 200점 종료 순서에서 최고 점수가 100 → 100 → 200인지 확인합니다. PlayerPrefs 삭제 후 0으로 시작하는지도 봅니다.
5. 코드가 동작하는 이유
결과가 기존 값보다 높을 때만 쓰고 Scene을 다시 로드해 Scene 소유 런타임 상태와 이벤트 구독을 새로 만듭니다. 저장 키에 버전을 넣어 포맷 변경 시 구분할 수 있습니다.
6. 자주 하는 실수와 해결법
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
재시작과 최고 점수: PlayerPrefs로 로컬 기록 저장하기 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.