[Unity] Data Application.Persistent 저장, DataManager

고현규·2024년 1월 31일
0
post-custom-banner

데이터 로컬 저장

로컬상 데이터를 저장하는 코드를 작성했다. 팀원분이 작성한 내용을 인용한 것이다.
C드라이브 내부 AppData 안에 위치하게 된다. Save와

public UserFollowerData FollowerData { get; private set; }

public void CreateUserFollower()
{
    var jsonData = Manager.Resource.GetFileText("DataTableFollower");
    FollowerData = JsonUtility.FromJson<UserFollowerData>(jsonData);

    SaveToUserFollower();
}

public void SaveToUserFollower(string fileName = "game_follower.dat")
{
    string filePath = $"{Application.persistentDataPath}/{fileName}";
    string json = JsonConvert.SerializeObject(FollowerData, Formatting.Indented);
    File.WriteAllText(filePath, json);
}

로드 할 때, 불러올 데이터가 없는 경우에는 CreateUserFollwer를 통해 처음 데이터를 생성한다.

public void LoadFromUserFollower(string fileName = "game_follower.dat")
{
    string filePath = $"{Application.persistentDataPath}/{fileName}";
    if (!File.Exists(filePath)) { CreateUserFollower(); return; }
    string jsonRaw = File.ReadAllText(filePath);
    FollowerData = JsonConvert.DeserializeObject<UserFollowerData>(jsonRaw);
}

DataManager

using System.Collections.Generic;
using UnityEngine;

public class FollowerDataManager
{
    private string _followerDataBaseText;
    private FollowerDataBase _follwerData;
    private Dictionary<string, FollowerData> _followerDataDictionary = new();
    public Dictionary<string, FollowerData> FollowerDataDictionary => _followerDataDictionary;

    public void ParseFollowerData()
    {
        _followerDataBaseText = Manager.Resource.GetFileText("DataTableFollower");
        _follwerData = JsonUtility.FromJson<FollowerDataBase>(_followerDataBaseText);
        foreach (var followerData in _follwerData.FollowerDataList)
        {
            _followerDataDictionary.Add(followerData.itemID, followerData);
        }
    }
    public void InitFollower()
    {
        ParseFollowerData();
    }
}

[System.Serializable]
public class UserFollowerData
{
    public List<UserEquipFollowerData> UserEquipSkill;
    public List<UserInvenFollowerData> UserInvenFollowerData;
}

[System.Serializable]
public class UserEquipFollowerData
{
    public string itemID;
}

[System.Serializable]
public class UserInvenFollowerData
{
    public string itemID;
    public int level;
    public int hasCount;
    public bool equipped;
}

[System.Serializable]
public class FollowerDataBase
{
    public List<FollowerData> FollowerDataList;
}

[System.Serializable]
public class FollowerData
{
    public string itemID;
    public string followerName;
    public string rarity;
    public float damageCorrection;
    public float reinforceDamage;
    public float retentionEffect;
    public float reinforceEffect;
}

ParseFollowerData() 메서드는 Player가 초기화 되는 Init함수에서 호출된다.

json으로 저장하기 위해 [System.Serializable]을 사용하고,
클래스로 만든 데이터를 클래스로 받아 저장하여 이를 json으로 저장하고 사용한다.

profile
게임 개발과 기획
post-custom-banner

0개의 댓글