유니티

유니티 PlayerPrefs

bugmin 2024. 4. 18. 23:49

총 easy, normal, hard 3가지의 스테이지가 있는 게임이라 하자

 

이 세 가지의 스테이지에 대한 최고 점수를 PlayerPrefs를 이용해 간단하게 저장하고자 한다.

switch (level)
        {
            case 1:
                key = "easyBest";
                break;
            case 2:
                key = "normalBest";
                break;
            case 3:
                key = "hardBest";
                break;
        }

 

int로 선언된 level 변수의 값에 따라 PlayerPrefs에 쓸 key 값을 설정해주자

bool PlayerPrefs.HasKey(string key)

 

key 값은 string으로 PlayerPrefs의 HasKey 함수를 통해 해당 key의 데이터가 있는 지를 확인 할 수가 있다. 

데이터가 있다면 true 값을 반환해줄 것이다.

 

이를 이용해 최고 점수를 저장하는 SaveBestScore 함수를 만들어보자

    void SaveBestScore()
    {
        if(PlayerPrefs.HasKey(key))
        {
            float bestScore = PlayerPrefs.GetFloat(key);
            if(bestScore < score)
            {
                PlayerPrefs.SetFloat(key, score);
                bestScoreTxt.text = score.ToString("N2");
            }
            else
            {
                bestScoreTxt.text = bestScore.ToString("N2");
            }
        }
        else
        {
            PlayerPrefs.SetFloat(key, score);
            bestScoreTxt.text = score.ToString("N2");
        }
    }

 

if문을 통해 HasKey 함수의 반환값이 true라면 최고 점수가 있는 것이고 false면 최고 점수 데이터가 없는 것이다.

 

score는 현재 점수를 담고 있는 변수다.

 

만일 HasKey 함수의 반환값이 true로 최고 점수가 있는 경우엔

 

현재 점수와 최고 점수를 비교해 현재 점수가 최고 점수보다 높으면 이 점수를 최고 점수로 설정해주면 된다.

 

설정방법은 PlayerPrefs의 SetFloat 함수를 통해 설정해준다.

void PlayerPrefs.SetFloat(string key, float value)

 

첫 인자에 key값 두 번째 인자에 설정하고자 하는 값을 넣으면 된다.

 

해당 함수를 통해 현재 점수를 최고 점수로 등록해주었다.

 

bestScoreTxt.text = score.ToString("N2");

 

그리고 현재 점수가 최고점수기 때문에 해당값을 ToString으로 변환하여 최고점수를 표시하는 텍스트 요소에 넣어주었다.

"N2"는 소수점 2째짜리까지 나타내겠다는 의미이다.

 

만일 최고점수가 현재 점수보다 크면 

bestScoreTxt.text = bestScore.ToString("N2");

 

기존의 최고 점수를 텍스트에 넣어주면 된다.

 

만일 HasKey함수의 반환값이 false면 최고점수가 등록이 안되어있는 경우로 처음 플레이하거나 클리어한 적이 없는 경우이기에

 

PlayerPrefs.SetFloat(key, score);
bestScoreTxt.text = score.ToString("N2");

 

위와같이 현재 점수를 최고 점수로 설정해주고 최고 점수를 표시하는 텍스트에도 현재 점수의 정보를 넣었다.

 

이런식으로 key값에 따라 데이터를 관리해줄 수 있다.

'유니티' 카테고리의 다른 글

유니티 - 애니메이션  (0) 2024.05.24
유니티 아크탄젠트(Atan2)에 대하여  (0) 2024.05.13
유니티 UI의 Rect Transform  (0) 2024.04.17
유니티 캔버스(Canvas)와 Render Mode  (0) 2024.04.16
유니티 C# OrderBy와 ThenBy  (0) 2024.04.15