반응형
1. Save
01 persistentDataPath
public static string persistentDataPath;
저장 경로
Windows: "C:\Users<사용자이름>\AppData\Local<회사 또는 프로젝트 이름>\"
macOS:" /Users/<사용자이름>/Library/Application Support/<회사 또는 프로젝트 이름>/"
02 FileStream
FileStream객체는 file에 대한 Stream이 열리고 해당 Stream을 사용하여 file의 데이터를 읽고 쓸 수 있다.
using System.IO
public class FileStream : System.IO.Stream
03 File.Create
지정된 경로에 파일을 생성한다.
using System.IO
public static System.IO.FileStream Create (string path);
04 BinaryFormatter
BinaryFormatter 클래스의 생성자 이를 호출하여 인스턴스를 만들 수 있다.
public BinaryFormatter ();
05 BinaryFormatter().Serialize
BinaryFormatter 인스턴스를 사용하여 객체 save를 file에 직렬화한다.
new BinaryFormatter().Serialize(file,save);
06 Save 전체코드
static readonly string FILEPATH = Application.persistentDataPath + "/Save.save";
public static void Save(GameStateSave save)
{
using (FileStream file = File.Create(FILEPATH))
{
new BinaryFormatter().Serialize(file,save);
}
}
2. Load
01 File.Exists
파일이 존재하는지 확인
using System.IO;
public static bool Exists (string? path);
02 using문 사용
using (FileStream file = File.Open(FILEPATH, FileMode.Open))
{
object loadedData = new BinaryFormatter().Deserialize(file);
loadedSave = (GameStateSave)loadedData;
}
using문 알아보기
03 Load 전체 코드
static readonly string FILEPATH = Application.persistentDataPath + "/Save.save";
public static GameStateSave Load()
{
GameStateSave loadedSave = null;
if (File.Exists(FILEPATH))
{
using (FileStream file = File.Open(FILEPATH, FileMode.Open))
{
object loadedData = new BinaryFormatter().Deserialize(file);
loadedSave = (GameStateSave)loadedData;
}
}
return loadedSave;
}
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 파일 확인
반응형
'유니티 공부 > Unity' 카테고리의 다른 글
Unity - 버튼 활성/비활성 시키기(interactable) (0) | 2023.06.18 |
---|---|
Unity - using문(using directive , using statement) (0) | 2023.06.18 |
Unity - 게임 json파일로 저장하고 로드하는 법 (JsonUtility.ToJson, JsonUtility.FromJson) (0) | 2023.06.17 |
Unity - ScrollView 원하는 만큼 Scroll 내리는 법( anchoredPosition) (0) | 2023.06.16 |
Unity - 'TMPro.TMP_Text'에서 'string'(으)로 변환할 수 없습니다 오류 (0) | 2023.06.16 |
댓글