직렬화란 데이터를 객체나 데이터를 문자열 또는 이진 데이터로 변환하여 파일, 네트워크, 데이터베이스등에 저장하거나 전송할 수 있도록 만드는 것이다.
[System.Serializable]
public class PlayerData
{
public string playerName;
public int level;
public float health;
}
데이터의 저장은 스크립트 내의 객체를 JSON으로 직렬화를 하여 저장하고 파일에 저장하고
파일에서 읽어와 JSON에 저장하여 객체로 역직렬화 하는 과정을 거친다.
private string _jsonData;
_jsonData = JsonUtility.ToJson(playerData);
위 코드는 객체를 JSON으로 변경하여 문자열에 저장한다.
객체의 멤버들이 JSON으로 전환 되어 저장된다.
playerData = JsonUtility.FromJson<PlayerData>(jsonData);
위 코드는 반대로 Json을 객체 데이터로 변환한다.
Json의 데이터를 객체의 멤버로 변화한다.
using System.IO;
...
_filePath = Path.Combine(Application.persistentDataPath, "PlayerData.json");
File.WriteAllText(_filePath, jsonData);
File.WriteAllText를 통해 _filePath 경로에 jsonData를 저장한다.
Application.persistentDataPath는 각 운영체제에서 허용하는 읽기/쓰기가 가능한 폴더 경로로 안전히 데이터를 저장/불러오기를 할 수 있다.
if (File.Exists(_filePath))
{
string jsonData = File.ReadAllText(_filePath);
PlayerData playerData = JsonUtility.FromJson<PlayerData>(jsonData);//역직렬화
}
File.Exists(_filePath)는 경로에 파일이 존재하는지 확인한다.
파일이 있다면 경로에서 Json을 읽어 문자열에 저장한다.
그 후 위에서 했던 것 처럼 객체의 데이터를 전달할 수 있다.