현재 만들고 있는 게임은 템플런 같은게임을 생각하며 만든게임이다.
튜토리얼을 따로 만들까 하다가 튜토리얼 후에 본게임으로 들어가게 구현하기로 했다.
템플런에서는 다운받고 첫판을 시작하면 튜토리얼 후에 본게임으로 들어간다. 삭제했다가 다시하면 다시 튜토리얼 부터 시작한다. 그렇기에 나도 삭제하고 다시 다운받으면 튜토리얼부터 시작하는걸로 구현하기로 했다.
이 때 다운받고나서 첫판인지 아닌지 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
'유니티' 카테고리의 다른 글
유니티 m_ 이 앞에 붙은 변수는 인스펙터에서 컬링한다 (0) | 2023.03.13 |
---|---|
유니티 Update vs FixedUpdate (0) | 2022.11.06 |
유니티 구글 광고 붙이기(Google Ad Mob) (1) | 2022.09.22 |
유니티 구글플레이 리더보드 연동 (0) | 2022.09.19 |
유니티 네트워크 체크후 불안정하면 Android Alert Dialog띄우기 (1) | 2022.09.15 |