모든 프로그램에 필수적인 데이터 저장.
Unity에서는 어떻게 저장할까?
Json, XML, CSV, SQL, ... 많은 방법이 있지만
"거창한거 필요 없어! 간단한게 필요해!"
라고 생각하신다면 PlayerPrefs 를 추천합니다.
PlayerPrefs란?
개념
•
유니티에서 제공해주는 데이터 관리 클래스
•
key - value 방식으로 저장
•
제공하는 변수 타입
◦
int
◦
float
◦
string
◦
bool
장점
•
간단한 저장
•
추가적인 구현 필요 없음
•
직관적이고 간단한 함수
단점
•
보안이 매우 취약함 → 게임 데이터가 해킹당할 수 있음.
•
한번에 1개의 값만 저장하고 불러올 수 있음
•
하나의 파일에 모든 값이 저장되어 있음
추천 기능
•
게임 설정
◦
언어, 볼륨, ...
사용 방법
저장
•
void PlayerPrefs.SetInt(string key, int value);
•
void PlayerPrefs.SetFloat(string key, float value);
•
void PlayerPrefs.SetString(string key, string value);
불러오기
•
int PlayerPrefs.GetInt(string key[, defaultValue]);
•
float PlayerPrefs.GetFloat(string key[, defaultValue]);
•
string PlayerPrefs.GetString(string key[, defaultValue]);
→ key를 통해 value를 찾아 반환
만약, key값이 없다면 defaultValue 반환
•
bool PlayerPrefs.HasKey(string key[, defaultValue]);
◦
해당 키 값의 존재 여부를 true/false 반환
삭제
•
void PlayerPrefs.DeleteAll();
•
void PlayerPrefs.DeleteKey(string key);
예제
→ 화살표를 눌러서 현재점수 -10/+10
→ 현재 점수
→ 최고 점수
→ 모든 점수 초기화
•
실행 흐름
1.
현재 점수, 최고 점수 초기화
void Start()
{
// 점수 초기화
nowScore = 0;
heighScore = PlayerPrefs.GetInt("HeighScore", 0);
// 점수 UI에 반영
updateScore();
}
C#
복사
PlayerPrefs.GetInt("HeighScore", 0);
→ 키가 "HeighScore"인 value를 불러오는데,
만약 존재하지 않으면 0값을 반환.
2.
점수 변화
//점수 증가, 감소
public void changeScore(int value)
{
this.nowScore += value;
// 최고점수 갱신
if (nowScore > heighScore)
{
heighScore = nowScore;
PlayerPrefs.SetInt("HeighScore", this.heighScore);
}
// 점수 UI에 반영
updateScore();
}
C#
복사
좌측 화살표를 누르면 -10
우측 화살표를 누르면 +10
PlayerPrefs.SetInt("HeighScore", this.heighScore);
→ 키가 "HeighScore"인 값을 this.heighScore 로 저장
3.
점수 초기화
public void resetScore()
{
nowScore = 0;
heighScore = 0;
PlayerPrefs.SetInt("HeighScore", heighScore);
updateScore();
}
C#
복사
heightScore 를 0으로 초기화 한 후,
PlayerPrefs.SetInt("HeighScore", this.heighScore);
→ 키가 "HeighScore"인 값을 this.heighScore 로 저장
•
실행 결과
재시작 하면 최고 점수가 남아있음을 확인
전체 코드
저장 경로
•
macOS: ~\Library\Preferences
•
Windows: HKCU\Software\[company name]\[product name]
•
Linux: ~\.config\unity3d\[company name]\[product name]
•
Android: \data\data\[pkg-name]\shared_prefs\[pkg-name].xml
•
iOS: \Library\Preferences\[bundle identifier].plist
•
WebGL: brower's indexedDB API
참고한 사이트
•
Unity Documentation: https://docs.unity3d.com/kr/current/ScriptReference/PlayerPrefs.html