반응형
1. Save
01 persistentDataPath
public static string persistentDataPath;
저장 경로
Windows: "C:\Users<사용자이름>\AppData\Local<회사 또는 프로젝트 이름>\"
macOS: "/Users/<사용자이름>/Library/Application Support/<회사 또는 프로젝트 이름>/"
02 JsonUtility.ToJson
public static string ToJson(object obj);
반환
obj의 데이터를 Json으로 변환한 문자열로 반환한다.
03 File.WriteAllText
새 파일을 만들고 지정된 문자열을 해당 파일에 쓴다. 만약 대상 파일이 이미 존재하는 경우 파일에 덮어쓴다.
File.WriteAllText 메서드를 사용하기 위해 using System.IO를 추가해야 한다.
using System.IO;
public static void WriteAllText (string path, string? contents);
04 Save 전체 코드
static readonly string FILEPATH = Application.persistentDataPath + "/Save.json";
public static void Save(GameStateSave save)
{
string json = JsonUtility.ToJson(save);
File.WriteAllText(FILEPATH, json);
}
2. Load
01 File.Exists
파일이 존재하는지 확인
using System.IO;
public static bool Exists (string? path);
02 JsonUtility.FromJson
JSON 형식의 문자열을 사용하여 해당 데이터를 객체로 역직렬화한다.
public static T FromJson<T>(string json);
매개변수
T: 역직렬화된 객체의 유형을 나타낸다. 역직렬화된 결과로 반환되는 객체의 유형을 명시적으로 지정해야 한다.
json: Json 형식의 문자열로 직렬화된 데이터이다.
반환
역직렬화된 결과로 반환되는 객체이다.
03 Load 전체 코드
static readonly string FILEPATH = Application.persistentDataPath + "/Save.json";
public static GameStateSave Load()
{
GameStateSave loadedSave = null;
if (File.Exists(FILEPATH))
{
string json = File.ReadAllText(FILEPATH);
loadedSave = JsonUtility.FromJson<GameStateSave>(json);
}
return loadedSave; // GameStateSave의 객체를 반환
}
3. 간단한 클릭커 게임으로 예시
01 IncreaseClickCount
버튼의 클릭 횟수와 스코어를 관리
public void IncreaseClickCount()
{
clickCount++;
score.text = clickCount.ToString();
}
02 클릭 횟수 정보 저장하기
[System.Serializable]
public class ScoreSave
{
public int clickCount;
public ScoreSave(int clickCount)
{
this.clickCount = clickCount;
}
}
03 게임 데이터 저장하기
현재 코드에서는 점수 정보만 가지고 있지만 필요에 따라 다른 필요한 데이터도 저장할 수 있다.
[System.Serializable]
public class GameStateSave
{
public ScoreSave scoreSave;
public GameStateSave(ScoreSave scoreSave)
{
this.scoreSave = scoreSave;
}
}
04 게임 저장하거나 불러오기
ublic void SaveGameState()
{
ScoreSave currentScore = new ScoreSave(Manager.Instance.clickCount);
GameStateSave gameState = new GameStateSave(currentScore);
SaveManager.Save(gameState);
}
public void LoadGameState()
{
GameStateSave loadedGameState = SaveManager.Load();
if (loadedGameState != null)
{
ScoreSave loadedScore = loadedGameState.scoreSave;
Manager.Instance.clickCount = loadedScore.clickCount;
Manager.Instance.score.text = Manager.Instance.clickCount.ToString();
}
}
05 SaveManager
위의 Save, Load코드 참조
4. 결과
01 영상 확인
02 파일 확인
GameStateSave.cs파일에서 ScoreSave 멤버 변수를 가지고 있으므로 GameStateSave객체를 직렬화할 때 해당 멤버 변수 이름인 scoreSave와 그 값이 저장된다. 그러므로 아래와 같은 결과가 나온다.
반응형
'유니티 공부 > Unity' 카테고리의 다른 글
Unity - using문(using directive , using statement) (0) | 2023.06.18 |
---|---|
Unity - 게임 binary파일로 저장하고 로드하는 법(BinaryFormatter, using문) (0) | 2023.06.17 |
Unity - ScrollView 원하는 만큼 Scroll 내리는 법( anchoredPosition) (0) | 2023.06.16 |
Unity - 'TMPro.TMP_Text'에서 'string'(으)로 변환할 수 없습니다 오류 (0) | 2023.06.16 |
Unity - 텍스트에 타이핑 효과(typingEffect) 적용하는 방법 (1) | 2023.06.16 |
댓글