Пытаюсь сделать так, чтобы от сессии к сессии сохранялись данные инвентаря, а точнее предметов в нём. Не получается. Что я делаю не так?
Вот код с предметами, они потом добавляются в инвентарь.
public class Items : MonoBehaviour
{
public int[] DefenceItems = new int[] { 5, 10, 15, 20, 25 };
public bool[] HasItems = new bool[] { false, false, false, false, false };
public string[] NameItems = new string[] { "Bandit Pants", "Bulletproof cloak", "Bulletproof cloak Elbow", "Bulletproof cloak wrist", "Military Helmet" };
public int[] Quantity = new int[] { 0, 0, 0, 0, 0 };
public GameObject Character;
public Sprite[] Sprites;
public ItemData ItemDataScript;
[SerializeField]private List<ItemData> items = new List<ItemData>();
private int _currentItem;
private int _currentDefence;
private void Start()
{
ItemDataScript.LoadItems();
}
public void AddItem(int index)
{
HasItems[index] = true;
if (HasItems[index])
{
Quantity[index]++;
}
ItemDataScript = new ItemData(NameItems[index], Quantity[index], DefenceItems[index], this);
items.Add(ItemDataScript);
items[index].SaveItems();
}
Вот класс с данными
[System.Serializable]
public class ItemData
{
public string Name;
public int Quantity;
public int Defence;
public Items ItemScript;
public ItemData(string name, int quantity, int defence, Items itemScript)
{
Name = name;
Quantity = quantity;
Defence = defence;
ItemScript = itemScript;
}
Сохранение
public void SaveItems()
{
for (int i = 0; i < ItemScript.HasItems.Length; i++)
{
if (ItemScript.HasItems[i])
{
string name = ItemScript.NameItems[i];
int quantity = GetQuantity(name);
int defence = ItemScript.DefenceItems[i];
ItemData data = new ItemData(name, quantity, defence, ItemScript);
ItemScript.items.Add(data);//
}
}
string json = JsonUtility.ToJson(ItemScript.items);//
File.WriteAllText(Path.Combine(Application.persistentDataPath, "items.json"), json);
}
Загрузка
public void LoadItems()
{
ItemScript.items.Clear();//
string filePath = Path.Combine(Application.persistentDataPath, "items.json");
if (File.Exists(filePath))
{
string json = File.ReadAllText(filePath);
ItemScript.items = JsonUtility.FromJson<List<ItemData>>(json);
foreach(ItemData data in ItemScript.items)//
{
int index = GetIndex(data.Name);
if (index != -1)
{
ItemScript.HasItems[index] = true;
SetQuantity(data.Name, data.Quantity);
Debug.Log("С индексом всё хорошо");
}
else
{
Debug.Log("Косяк с индексом");
}
}
}
То, что в цикле foreach не дебажится. В смысле в консоль ничего не попадает
Вот метод GetIndex
private int GetIndex(string name)
{
for (int i = 0; i < ItemScript.NameItems.Length; i++)
{
if (ItemScript.NameItems[i] == name)
{
return i;
}
}
return -1;
Выяснил, что файл json и pathFile почему-то при отладке пустые. Выводит только {}