본문 바로가기
유니티 공부/Unity

Unity - 게임 binary파일로 저장하고 로드하는 법(BinaryFormatter, using문)

by 코딩하는 돼징 2023. 6. 17.
반응형

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문 알아보기

 

Unity - using문(using directive , using statement)

1. using directive 파일 상단에 namespace를 불러오는데 사용된다. using UnityEngine; using System.Collections; using System.Collections.Generic; 2. using statement using문을 사용하면 Resource를 사용한 후에 자동으로 정리 및

code-piggy.tistory.com


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 파일 확인

반응형

댓글