나 개발자 진짜 되냐?

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

오늘 공부를 정리해봐요!

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

Snow Rabbit 2025. 1. 6. 23:59

 

 

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

ㅋㅋㅋㅋㅋㅋ

왜냐면 내일

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

 

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

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

 

나는 일단 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수정을 우선적으로 하려고 한다..ㅎ