Unity/유니티 기본

[4.21] Persistent Data Path에 기반한 데이터 읽기/쓰기

ljw4104 2021. 4. 21. 12:44

  • Persistent Data Path는 영구 데이터 디렉토리에 대한 경로를 포함한다.
종류 특징 저장경로
Data Path 해당 디바이스의 프로젝트 폴더를 기반
이걸 기반으로 코드짜면 빌드 후 리소스 안뜸
UnityEditor : 
 
<
path to project folder>/Assets
Persistent Data Path OS마다 고유의 저장공간
OS에 신경쓰지 않고 저장할 수 있음
Window :  %userprofile%\AppData\Local\Packages\<productname>\
  • 이러한 DataPath를 사용해서 데이터를 읽고 저장할 수 있다.
  • 옵션과 같은 간단한 정보들은 이것들을 통해서 저장을해도 되지만 유저의 캐릭터 정보와 같은 중요한 정보는 클라이언트 내에서 저장하지 않고 서버통신을 통해 서버로 전달해서 저장을 하게 되므로 이 방법은 사용하지 않는 것이 좋다.

 

 

DataManager.cs // 전의 게시글과 데이터 불러오는 방식이 달라졌고 신규유저, 기본유저를 구분한다.

public void LoadDatas()
{
    var path = string.Format("{0}/game_info.json", Application.persistentDataPath);
    if (File.Exists(path))
    {
        this.GetStageDatas();
    }
    else
    {
        CreateNewData();
        LoadDatas();
    }
}

public void CreateNewData()
{
    GameInfo gameInfo = new GameInfo();
    for (int i = 0; i < this.lobby.maxStage; i++)
    {
        StageInfo stage = new StageInfo(i + 1, 0, StageInfo.eState.Lock);
        gameInfo.stages.Add(stage);
    }

    var data = JsonConvert.SerializeObject(gameInfo);
    var path = string.Format("{0}/game_info.json", Application.persistentDataPath);
    File.WriteAllText(path, data);
}

private void GetStageDatas()
{
    var path = string.Format("{0}/game_info.json", Application.persistentDataPath);
    var data = File.ReadAllText(path);
    var arr = JsonConvert.DeserializeObject<GameInfo>(data);

    var tmpArr = arr.stages;
    foreach (var i in tmpArr)
    {
        this.stageArr.Add(i.stageNo, i);
    }
}
  • 새로운 데이터를 만들고 로드되는 데이터는 GameInfo이기 때문에 전처럼 StageInfo[]형태로 받으면 안된다.
  • 새로운 데이터를 만들때는 모든 스테이지를 Lock하는 형식으로 만들었다.