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하는 형식으로 만들었다.