오늘 공부를 정리해봐요!

[ 1月 6日 ] 오늘 내가 배운 것 _ 77日次 _ SaveManager을 만들어요

Snow Rabbit 2025. 1. 6. 23:59

 

 

럭키 77!!!!!
6일이 아니라 7일이었다면....


오늘은 팀원분들과 날밤을 새기로 했다.

ㅋㅋㅋㅋㅋㅋ

왜냐면 내일

목표했던 최종빌드를 마무리 짓기 위해서이다.

 

이번주 목요일에 유저테스트를 받기 위해

오늘 밤새 열심히 달리려고 한다.

 

나는 일단 SaveManager을 끝냈다.

 

끝낸 거 같은데..

뭔가 뭔가 하나 빈 거 같은데

기분 탓일지도,

쉽지 않았던 시간이었다.

 

SaveData와 SaveManager에 대해 이야기해보자!

 

먼저 

저장할 데이터들을 모아둔 클래스를 하나 만들었다.

< UserData.cs >

 

유저의 정보를 저장해 주었다.

 

< SaveData.cs >

 

그리고 saveData를 만들어 주었다.

여기에는 우리가 json으로 저장해 주기 위해 틀을 만들어주는 부분이다.

 

 

 

< SaveManager.cs >

여기서 우리는 json으로 변환하고 로드해 주는 과정을 적어 둘 것이다.

 

using System.Collections.Generic;
using System.IO;
using UnityEngine;

public class SaveManager : Singleton<SaveManager>
{
    private string saveFilePath; // 저장 파일 경로

    protected override void Awake()
    {
        base.Awake();

        // 저장 파일 경로 설정 (플랫폼에 따라 다르게 설정 가능)
        saveFilePath = Application.persistentDataPath + "/saveData.json";
    }

    public void SaveGame(SaveData data)
    {
        // SaveData를 JSON 형식으로 변환
        string json = JsonUtility.ToJson(data, true);

        // JSON을 파일에 저장
        File.WriteAllText(saveFilePath, json);

        Debug.Log($"Game Saved! Path: {saveFilePath}");
    }

    public SaveData LoadGame()
    {
        // 저장 파일이 존재하지 않으면 null 반환
        if (!File.Exists(saveFilePath))
        {
            Debug.LogWarning("Save file not found!");
            return null;
        }

        // 파일에서 JSON 읽기
        string json = File.ReadAllText(saveFilePath);

        // JSON을 SaveData 객체로 변환
        SaveData data = JsonUtility.FromJson<SaveData>(json);

        Debug.Log($"Game Loaded!");
        return data;
    }


    public void DeleteSave()
    {
        if (File.Exists(saveFilePath))
        {
            File.Delete(saveFilePath);
            Debug.Log("Save file deleted.");
        }
    }
}

 

save에서는 json파일을 저장할 수 있게 해 준다.

 

load에서는 json파일을 불러올 수 있게 해 준다.

 

 

 

다음에 이렇게 save, load 해준 것을

게임매니저에서

json파일을 가져와서 유니티에 load 해주게 된다.

 

 

선언

 

초기화

 

 

 

여기 SaveGame으로 이제 진짜 저장이 됩니다.

 

 

Load도 해줍니다.

 

이렇게 해주면

우리는 이제

GameManager.Instance.LoadGame()으로 데이터를 가져올 수 있다.

 

 

이렇게 이름을 가져올 수 있다.

 

 

버튼을 누르거나 함수가 실행될 때

게임매니저의 싱글톤으로 SaveGame로 가져오면

저장도 가능하다.

 

 

 

이렇게 해서 저장기능을 만들어보았다.

 

아직 부족한 부분이 있긴 한데..

오늘은 UI수정을 우선적으로 하려고 한다..ㅎ