유니티 PlayerPrefs를 이용한 세이브와 로드 [유니티 C#]

변수들은 메모리에 저장되기 때문에 프로그램을 끄는 순간 변수에 저장되어있는 데이터는 휘발됩니다.

오늘은 PlayerPrefs를 활용하여 메모리의 변수들을 SSD HDD 등의 보조기억장치에 저장하는 방법을 알아보겠습니다.

1. PlayerPrefs란?

PlayerPrefs

PlayerPrefsPlayer Preferences(플레이어 설정)의 줄임말 입니다.

주로 옵션(볼륨, 밝기 등)을 저장할 때 사용하지만, 이를 통해 게임에서 사용되는 여러 변수들을 저장하고 불러올 수도 있습니다.


저장 방식

저장 방식은 ‘Key-Value’방식을 사용하며, Int, Float, String 타입의 변수들을 저장 가능합니다.

C#
PlayerPrefs.SetInt("BestScore", 1000);

‘BestScore’라는 key에 1000 (Value)를 저장하는 식입니다.


저장 위치

PlayerPrefsSetInt, SetFloat, SetString 등을 통해 저장된 데이터는 각 OS별로 다른 위치에 저장됩니다.

  • Windows – 레지스트리
  • Mac/IOS – plist파일
  • Android – XML 파일

2. PlayerPrefs 저장

Set 키워드

PlayerPrefs는 SetInt, SetFloat, SetString를 통해 변수를 저장할 수 있습니다.

PlayerPrefs.Set키워드(“Key”, Value); 형태로 작성 후 마지막에 Save() 함수를 호출하면 안전하게 데이터를 저장할 수 있습니다.

C#
// 점수 저장
PlayerPrefs.SetInt("BestScore", 1000);

// 볼륨 저장
PlayerPrefs.SetFloat("BGM_Volume", 0.5f);

// 플레이어 이름 저장
PlayerPrefs.SetString("PlayerName", "Hero");

// Save 호출
PlayerPrefs.Save();

3. PlayerPrefs 불러오기

Get 키워드

PlayerPrefs로 저장한 값을 불러오려면 GetInt, GetFloat, GetString을 사용하면 됩니다.

Set과 마찬가지로 Key-Value 형태로 불러오지만, Get에서 Value는 Key에 저장된 데이터가 없을 때 불러오는 값으로 사용됩니다.

C#
// "BestScore" 키가 없으면 0
int score = PlayerPrefs.GetInt("BestScore", 0);

// "PlayerName" 키가 없으면 "Guest" 반환
string name = PlayerPrefs.GetString("PlayerName", "Guest");

4. PlayerPrefs 삭제

DeleteKey

DeleteKey를 사용하여 특정 키의 데이터를 삭제할 수 있습니다

C#
PlayerPrefs.DeleteKey("BestScore");

위 코드의 경우 ‘BestScore’ Key를 삭제합니다.


DeleteAll함수

DeleteAll 함수를 사용하면 PlayerPrefs에 저장되어있는 모든 데이터를 삭제합니다.

C#
PlayerPrefs.DeleteAll();

5. 단점

PlayerPrefs의 저장 위치를 보면 짐작할 수 있듯 레지스트리 편집, 안드로이드 루팅 등 PlayerPrefs는 보안에 매우 취약합니다.

따라서 보안이 중요한 게임이나, 중요한 데이터의 경우 Json, Binary등을 통해 암호화하여 저장하는 방법을 사용해야 됩니다.

PlayerPrefs는 설정값이나, 데이터 변조를 자유롭게 허락 할 수 있는 싱글플레이 게임에서 임시로 데이터를 저장하는 경우 사용하시면 좋습니다.

6. 정리

용도키워드
저장SetInt, SetFloat, SetString
불러오기GetInt, GetFloat, GetString
삭제DeleteKey, DeleteAll()

댓글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다