You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中PlayerEquipment.Equipment存档加载异常问题

Unity存档加载异常问题

我在Unity开发中遇到了存档加载的诡异问题:有两个List<Item>变量(items、playerEquipment.equipment),尝试同时保存和加载,但表现不一致:items始终能正常保存加载,但playerEquipment.equipment只有在保存后不退出Play模式直接加载才能得到正确结果;如果保存后退出Play模式再重新进入加载,得到的就是全为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[i].type + " with id " + data.equipment[i].id+" and type "+ data.equipment[i].type);
        //Save data from PlayerInfo to a file named players
        DataSaver.saveData(data, "players");
    }
}

加载代码

public void LoadPlayer()
{
    SaveData data = DataSaver.loadData<SaveData>("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<String> itemsString;
    //public List<String> equipmentString;

    public List<Item> items;
    public List<Item> 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;
}

内容的提问来源于stack exchange,提问作者dgleming

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 00:30:54