Unity

PlayerPrefs를 이용해 데이터 저장하기

박도치 2023. 10. 31. 20:50

PlayerPrefs를 이용하면 내가 원하는 데이터값을  key값을 통해 저장하고, 이를 불러올 수 있다.

 

1.데이터 저장하기

데이터 저장은 다음과 같다.

PlayerPrefs.SetFloat("key값", Float값);
PlayerPrefs.SetInt("key값", Int값);
PlayerPrefs.SetString("key값", String문자열);

set을 통해 값을 저장하고, get을 통해 값을 가져오는 것이다.

 

데이터 불러오기 

float num = PlayerPrefs.getFloat("key값");
int num = PalyerPrefs.getInt("key값")
string str = PlayerPrefs.getString("key값");

 

이를 이용해 점수를 key값에 담아 저장한 후, 가져올 수 있다.

 

그렇다면 최고기록은 어떤식으로 가져올 수 있는가

 

최초의 플레이라면 현재 점수가 최고기록일 것이다. 그러면 최고기록이 없을 때 현재 점수 == 최고기록 이 될 것 이고, 최고 기록이 있다면 get을 통해 최고기록을 가져온 후 현재 점수와 비교하여 높으면 현재점수를 최고기록에 다시 set하여 주면 된다.

 

그렇다면 현재 Key값이 존재해야 한다는 것을 알아야 하는데, 이 함수는 아래 함수와 같다.

 

PlayerPrefs.HasKey("key값")

이는 bool을 return하는 함수로 현재 가진 key값이 없으면 false, 있으면 true를 반환해준다.

 


public Text thisScoreText;
public Text timeText;

float alive = 0f;

void Update()
{
    alive += Time.deltaTime;
    timeText.text = alive.ToString("N2");
}

public void gameOver()
{
    Time.timeScale = 0.0f;
    thisScoreText.text = alive.ToString("N2");
    endPanel.SetActive(true);

    if (PlayerPrefs.HasKey("bestScore") == false)
    {
        PlayerPrefs.SetFloat("bestScore", alive);
    }
    else
    {
        if (PlayerPrefs.GetFloat("bestScore") < alive)
        {
            PlayerPrefs.SetFloat("bestScore", alive);
        }
    }
}

 

위 코드를 보면 alive함수를 현재 시간에 담아 살아남아있는 시간을 계산해주고 이를 timeText.text에 계속 기록해준다.

 

그렇게 gameOver이 되면 timeScale로 시간을 정지, 현재 기록을 thisScoreText에 옮겨주고 end패널을 띄워준다.

 

그리고 아래 if문에서 key값으로 bestScore가 없으면 현재 기록을 담아주고, 있으면 bestScore가 들고 있는 점수와 현재 점수를 비교하여 담아준다. 

 

만약 이 최고기록을 초기화 시키고싶다면 아래 함수를 start에 입력하면 된다.

 

PlayerPrefs.DeleteAll();