본문 바로가기

Unity/제로부터 구현

플레이어의 정보를 로컬 저장소에 저장하기 (PlayerPrebs)

728x90

PlayerPrefs는 로컬 저장소에 데이터를 저장하는 기능을 제공합니다. PlayerPrefs를 사용하면 게임 또는 애플리케이션의 실행 중에 데이터를 영구적으로 보존할 수 있으며 특정 키(Key)와 값(Value)의 쌍으로 데이터를 저장하고, 이를 로컬 저장소에 보관합니다. 저장된 데이터는 애플리케이션이 종료되어도 유지되며, 다음 실행 시에도 읽을 수 있습니다.

 

  1. 플레이어 데이터 클래스를 하나 생성해줍니다.
  2. 플레이어의 이름을 받아와 새로운 플레이어 클래스를 생성해주고 로컬 저장소에 이미 존재한다면 기존에 있던 데이터를 가져오고, 아니면 새로 만들어 줍니다.
  3. 플레이어의 정보를 저장하고, 가지고 올 수 있게 함수를 만들어줍니다.

 

1. 플레이어 데이터 클래스를 하나 생성해줍니다.

 [System.Serializable]
    public class PlayerData
    {
        public string playerName;
        public string gameLevel;
        public float easyFlipCount = 0;
        public float easyTime = 0;
        public int easyScore = 0;
        public float normalTime = 0;
        public float normalFlipCount = 0;
        public int normalScore = 0;
        public float hardFlipCount = 0;
        public float hardTime = 0;
        public int hardScore = 0;
    }

 

 

2. 플레이어의 이름을 받아와 새로운 플레이어 클래스를 생성해주고 로컬 저장소에 이미 존재한다면 기존에 있던 데이터를 가져오고, 아니면 새로 만들어 줍니다.

플레이어의 이름을 매개변수로 받아와 새로운 플레이어데이터 클래스를 만들어줍니다.

PlayerPrefs.HasKey() 로 로컬저장소에 키가 존재하는지 확인하고,  만약 있다면 게임매니저의 플레이어데이터로 설정해 줍니다.

로컬 조장소에 없다면 새로 만든 플레이어데이터에 매개변수로 받은 플레이어의 이름을 넣어줍니다.

    void CreateNewPlayer(string _playerName)
    {
        Debug.Log("Create Id");

        playerData = new PlayerData();
        playerName = _playerName;
        
        if (PlayerPrefs.HasKey(_playerName))
        {
            playerData = LoadLocalStorage(_playerName);
        }
        else
        {
            playerData.playerName = _playerName;
        }
    }

 

3. 플레이어의 정보를 저장하고, 가지고 올 수 있게 함수를 만들어줍니다.

게임이 클리어 되면 게임 매니저의 플레이어 데이터를 로컬저장소에 저장해줍니다. 

PlayerPrefs로 객체를 저장할 수 없기 때문에 JSON 형식의 문자열로 변환해 줘야 합니다.

public 필드나 프로퍼티만을 직렬화하기 때문에 플레이어 데이터 객체의 필드나 프로퍼티가 정확히 직렬화되도록 확인해야 합니다.

 

데이터를 불러올때는 json 형식의 문자열을 플레이어데이터 객체로 변환해 줍니다.

    public void SaveLocalStorage(PlayerData _playerData)
    {
        Debug.Log("Save Id");
        PlayerData playerData = _playerData;
        string json = JsonUtility.ToJson(playerData);
        PlayerPrefs.SetString(_playerData.playerName, json);
        //PlayerPrefs.Save();

    }

    public PlayerData LoadLocalStorage(string _playerData)
    {
        Debug.Log("Load Id");
        string json = PlayerPrefs.GetString(_playerData);
        PlayerData localData = JsonUtility.FromJson<PlayerData>(json);

        return localData;
    }
728x90