로컬상 데이터를 저장하는 코드를 작성했다. 팀원분이 작성한 내용을 인용한 것이다.
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);
}
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으로 저장하고 사용한다.