Проблемы Unity с загрузкой сохраненияC#

Место общения программистов C#
Ответить
Anonymous
 Проблемы Unity с загрузкой сохранения

Сообщение Anonymous »

Схожу с ума из-за этого, но до сих пор не могу понять, в чем дело. У меня есть 2 переменные List (items, playerEquipment.equipment), пытаюсь сохранить оба и потом загрузить, но получаю странные результаты.
Для предметов всегда хорошо, все время сохраняется и загружается, а вот для playerEquipment.equipment поведение другое: если я сохраняю, а затем сразу загружаю, не выходя из режима воспроизведения, я получаю правильный результат от функции загрузки, но если я сохраняю, останавливаю режим воспроизведения, запускаю режим воспроизведения, а затем загружаю, то в результате получаю список "null".
Вот мой код сохранения:
public void SavePlayer()
{
SaveData data = new SaveData();
data.level = level;
data.nick = nick;
data.experience = experience;
data.experienceToNextLevel = experienceToNextLevel;
data.maxHP = maxHP;
data.minAttack = minAttack;
data.maxAttack = maxAttack;
data.coins = coins;
data.items = items;
data.equipment = playerEquipment.equipment;

for (int i = 0; i < data.equipment.Count; i++)
{
Debug.Log("Saved type " + data.equipment.type + " with id " + data.equipment.id+" and type "+ data.equipment.type);
//Save data from PlayerInfo to a file named players
DataSaver.saveData(data, "players");
}
}

Вот мой код загрузки:
public void LoadPlayer()
{
SaveData data = DataSaver.loadData("players");

if (data == null)
{
Debug.Log("ERROR: data not loaded");
return;
}

level = data.level;
nick = data.nick;
experience = data.experience;
experienceToNextLevel = data.experienceToNextLevel;
maxHP = data.maxHP;
currentHP = data.maxHP;
minAttack = data.minAttack;
maxAttack = data.maxAttack;
coins = data.coins;
items = data.items;

playerEquipment.equipment = data.equipment;
}

SaveData:
[Serializable]
class SaveData
{
//all data types and names that go to save
public int level;
public string nick;
public int experience;
public int experienceToNextLevel;
public int maxHP;
public float minAttack;
public float maxAttack;
public int coins;
//public List itemsString;
//public List equipmentString;

public List items;
public List equipment;
}

Сохранить код, который я взял из этого ответа, и не изменил его.
Обновление: класс Item:
public enum ItemType { HELMET, SHOULDERS, WEAPON_MAIN, WEAPON_SECOND, BODY, ARMOR, HANDS, PANTS, BOOTS }

[CreateAssetMenu(menuName = "item")]
[Serializable]
public class Item : ScriptableObject
{
public int id;
public Sprite sprite;
public string itemName;
public ItemType type;
}


Подробнее здесь: https://stackoverflow.com/questions/751 ... ading-save
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»