게임을 만들다 보면, 점수나 설정 같은 정보를 저장하고 싶을 때가 있습니다.
예를 들어,
게임을 껐다 켜도 최고 점수를 기억하고 싶은 경우
사용자가 설정한 음량을 유지하고 싶은 경우
이럴 때 간단하게 사용할 수 있는 기능이 바로 Unity의 PlayerPrefs입니다.
PlayerPrefs란?
PlayerPrefs는 Unity에서 제공하는 간단한 데이터 저장 시스템입니다.
Prefers 는 영어 'Preferences' 의 약어이며, 프로그래밍 분야에서는 '선호' 라는 의미보다는 '설정' 에 조금 더 가까운 의미로 해석됩니다. 이 기능을 통해 파일이나 데이터베이스를 따로 만들 필요 없이, 숫자나 문자열을 쉽게 저장하고 불러올 수 있습니다.
다만 보안이 필요하거나 민감한 정보는 저장하지 않는 것이 좋습니다. 누구나 수정할 수 있는 위치에 저장되기 때문에, 핵심 데이터는 다른 방식으로 처리해야 합니다.
사용 방법
PlayerPrefs는 '키 - 값' 형태로 데이터를 저장합니다. 아래 세 가지 함수만 기억하시면 충분합니다.
// 저장하기
PlayerPrefs.SetInt("HighScore", 200);
// 불러오기
// 키가 없으면 기본값 0 반환
int score = PlayerPrefs.GetInt("HighScore", 0);
// 저장 적용 (선택 사항)
PlayerPrefs.Save();
Set 으로 값을 저장하고, Get 으로 불러옵니다. Save()는 즉시 저장하고 싶을 때만 사용하시면 됩니다.
PlayerPrefs.Save() 를 명시적으로 호출하지 않아도 Unity는 애플리케이션이 정상적으로 종료될 때 자동으로 값을 저장해줍니다. 하지만 예외적으로 강제 종료되거나 크래시가 발생하면 저장이 되지 않을 수 있기 때문에, 중요한 데이터는 Set 호출 후 Save()를 함께 호출해주는 것이 안전합니다. 예를 들어, 게임 설정이나 중간 저장처럼 사용자가 입력을 마친 직후 바로 저장이 필요한 경우에는 PlayerPrefs.Save()를 명시적으로 호출하는 습관이 좋습니다.
저장 경로
Windows
레지스트리에 저장됨
경로 :
HKEY_CURRENT_USER\Software\Company Name\Product Name
Company Name 과 Product Name 은 Unity > Edit > Project Settings > Player 에 설정한 이름입니다.
macOS
경로: ~/Library/Preferences/unity.회사이름.게임이름.plist
Android
경로: /data/data/패키지이름/shared_prefs/패키지이름.v2.playerprefs.xml
iOS
경로: ~/Library/Preferences/패키지이름.plist
저장 가능한 데이터 타입
PlayerPrefs는 총 세 가지 타입만 저장할 수 있습니다.
// 정수
PlayerPrefs.SetInt("Stage", 5);
// 실수
PlayerPrefs.SetFloat("Volume", 0.8f);
// 문자열
PlayerPrefs.SetString("UserName", "ozborn");
복잡한 자료형(예: 리스트, 구조체) 은 바로 저장할 수 없으며, 문자열로 변환하여 처리해야 합니다.
예시 코드
void SaveHighScore(int score)
{
PlayerPrefs.SetInt("HighScore", score);
}
int LoadHighScore()
{
return PlayerPrefs.GetInt("HighScore", 0);
}
위 코드처럼 저장할 때는 SetInt, 불러올 때는 GetInt를 사용합니다. GetInt("HighScore", 0) 처럼 기본값을 꼭 함께 사용하시는 것이 좋습니다. 해당 키가 없을 경우 기본값이 반환되므로 오류를 방지할 수 있습니다.
마무리
PlayerPrefs 는 게임 데이터를 빠르고 쉽게 저장할 수 있는 도구입니다. 복잡한 저장 시스템을 사용하지 않아도 되기 때문에 가볍게 접근할 때, 적합합니다.
물론 보안이 필요한 정보나 복잡한 구조를 저장하려면 다른 방식을 고려해야 하지만, 간단한 설정값이나 점수 저장에는 이보다 더 쉬운 방법이 없습니다.
'Unity' 카테고리의 다른 글
유니티에서 Resources 폴더에 대해 알아보기 (0) | 2025.03.31 |
---|---|
유니티에서 Scene 전환에도 안전한 GameManager class 만들기 (singleton) (0) | 2025.03.30 |
Button 클릭시, AddListener() 함수로 연결하는 방법 (0) | 2025.03.25 |
Button 클릭 시, 내가 짠 함수를 호출하는 방법 (0) | 2025.03.24 |
Destroy()의 동작 방식 (0) | 2025.03.16 |