본문 바로가기

유니티

Unity PlayerPrefs 활용

반응형

 현재 만들고 있는 게임은 템플런 같은게임을 생각하며 만든게임이다. 

튜토리얼을 따로 만들까 하다가 튜토리얼 후에 본게임으로 들어가게 구현하기로 했다.

템플런에서는 다운받고 첫판을 시작하면 튜토리얼 후에 본게임으로 들어간다. 삭제했다가 다시하면 다시 튜토리얼 부터 시작한다. 그렇기에 나도 삭제하고 다시 다운받으면 튜토리얼부터 시작하는걸로 구현하기로 했다.

이 때 다운받고나서 첫판인지 아닌지 PlayerPrfes를 활용해서 구분하겠다.

PlayerPrefs말고도 Json,XML 등등 다양한 저장방식이 있다. 각각마다 장/단점이 있으므로 그때그때 고려해서 다른 저장방식을 사용해주자.

 필자도 저번 프로젝트때에는 Json으로 암호화와 복호화까지 구현해서 플레이어 데이터를 저장했었는데 이번 프로젝트에선 간단한 PlayerPrefs를 활용했다.

1.PlayerPrefs란

PlayerPrefs란 간단한 수치, 데이터를 직접 클라이언트에 저장하고 관리하는, 유니티에서 제공해주는 데이터 관리  클래스이다. 

PlayerPrefs는 <Key,Value> 형식으로 데이터를 저장하며 int,float,string,bool타입의 데이터를 저장한다

 

2.PlayerPrefs 장점

  • 유니티에 내장되어있다
  • 매우 간단하며 배우기 쉽다
  • Java의 HashMap, C#의 Dictionary와 유사해서 알기 쉽다

3.PlayerPrefs 단점

  • int,float,string 만 가능하므로 제한적이다
  • 보안에 매우 취약하다(그래서 보통 볼륨,그래픽세팅값 같은거 넣는다)
  • 용량제한

4.PlayerPrefs저장 위치

윈도우 기준으로 registry의 HKEY_CURRENT_USER\Software\[company name]\[product name]' 에 저장이 된다.

안드로이드 기준으로 /data/data/pkg-name/shared_prefs/pkg-name.v2.playerprefs.xml. 이렇게 저장이된다.

5.PlayerPrefs활용

아래는 유니티 공식문서에서 참조했다.

DeleteAll Removes all keys and values from the preferences. Use with caution.
DeleteKey Removes the given key from the PlayerPrefs. If the key does not exist, DeleteKey has no impact.
GetFloat Returns the value corresponding to key in the preference file if it exists.
GetInt Returns the value corresponding to key in the preference file if it exists.
GetString Returns the value corresponding to key in the preference file if it exists.
HasKey Returns true if the given key exists in PlayerPrefs, otherwise returns false.
Save Writes all modified preferences to disk.
SetFloat Sets the float value of the preference identified by the given key. You can use PlayerPrefs.GetFloat to retrieve this value.
SetInt Sets a single integer value for the preference identified by the given key. You can use PlayerPrefs.GetInt to retrieve this value.
SetString Sets a single string value for the preference identified by the given key. You can use PlayerPrefs.GetString to retrieve this value.

 

6. PlayerPrefs 적용해서 첫판인지 아닌지 확인

게임을 시작하면 Main화면이므로 MainManager.cs 스크립트에 Start에 아래 코드를 넣어주었다.

if(!PlayerPrefs.HasKey("isNew"))//isNew라는 Key가없다면, 즉 다운받고 처음 실행이라면
{
    PlayerPrefs.SetInt("isNew",1);//1은 첫판이라는 뜻이다
}

 만약 시작했을때 isNew라는 Key가 없다면, 즉 첫판이라는 의미이므로 isNew라는 Key를 생성함과 동시에 Value는 1을 넣어준다

 

 그리고 시작버튼을 눌러서 씬을 로드하는 코드에  아래와 같이 넣어준다

 if(PlayerPrefs.GetInt("isNew")==1)//처음이라면 튜토리얼 화면을 로드한다
 {
     op=SceneManager.LoadSceneAsync("Tutorial");
 }
 else
 {
     op=SceneManager.LoadSceneAsync("Stage");
 }

마지막으로 튜토리얼화면에서 정상적으로 본 게임으로 넘어가면 아래의 코드가 실행되게 한다.

PlayerPrefs.SetInt("isNew",2);//튜토리얼을 끝냈다는 의미

 

출처: https://docs.unity3d.com/ScriptReference/PlayerPrefs.html

 

Unity - Scripting API: PlayerPrefs

Unity stores `PlayerPrefs` data differently based on which operating system the application runs on. In the file paths given on this page, the company name and product name are the names you set in Unity’s Player Settings. Standalone Player storage locat

docs.unity3d.com

 

 

 

반응형