锋531 2023-06-23 11:39 采纳率: 88.1%
浏览 58
已结题

unity如何保存和读取List的数据啊?

学着做了一个简单的背包,但是怎么保存list里面的数据呀,有点没想懂,求解!

img

  • 写回答

1条回答 默认 最新

  • 泡沫o0 2023年度博客之星上海赛道TOP 1 2023-06-23 12:50
    关注

    在Unity中,你可以使用多种方式来保存和读取List的数据,其中一种常见的方式是使用Unity自带的PlayerPrefs类,但是PlayerPrefs类并不直接支持List类型,所以你需要将List转换为字符串或者其他可以被PlayerPrefs支持的类型。

    另一种方式是使用序列化和反序列化。你可以将List序列化为JSON字符串,然后保存到文件中。需要的时候,你可以从文件中读取JSON字符串,然后反序列化为List。

    以下是一个简单的例子,展示了如何使用JSON序列化和反序列化来保存和读取List的数据:

    using System.Collections.Generic;
    using System.IO;
    using UnityEngine;
    using System.Runtime.Serialization.Formatters.Binary;
    
    public class SaveLoadManager : MonoBehaviour
    {
        public List<int> itemList = new List<int>();
    
        void Start()
        {
            // 添加一些数据到List中
            itemList.Add(1);
            itemList.Add(2);
            itemList.Add(3);
    
            // 保存数据
            SaveData();
    
            // 清空List
            itemList.Clear();
    
            // 读取数据
            LoadData();
    
            // 输出读取到的数据
            foreach (int item in itemList)
            {
                Debug.Log(item);
            }
        }
    
        void SaveData()
        {
            BinaryFormatter formatter = new BinaryFormatter();
            FileStream fileStream = new FileStream(Application.persistentDataPath + "/save.dat", FileMode.Create);
    
            formatter.Serialize(fileStream, itemList);
            fileStream.Close();
        }
    
        void LoadData()
        {
            string path = Application.persistentDataPath + "/save.dat";
            if (File.Exists(path))
            {
                BinaryFormatter formatter = new BinaryFormatter();
                FileStream fileStream = new FileStream(path, FileMode.Open);
    
                itemList = formatter.Deserialize(fileStream) as List<int>;
                fileStream.Close();
            }
        }
    }
    

    在这个例子中,我们首先创建了一个List,并添加了一些数据。然后,我们调用SaveData方法将List序列化为JSON字符串并保存到文件中。然后,我们清空了List,然后调用LoadData方法从文件中读取JSON字符串并反序列化为List。

    注意,这个例子使用的是System.Runtime.Serialization.Formatters.Binary.BinaryFormatter类来进行序列化和反序列化,这个类在Unity中是可用的。如果你的项目中已经包含了Newtonsoft.Json库,你也可以使用这个库来进行JSON序列化和反序列化,这个库提供了更多的功能和选项。

    另外,Application.persistentDataPath是Unity提供的一个路径,这个路径在不同的平台上有不同的值,但是它总是指向一个可以用来存储持久化数据的位置。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 7月4日
  • 已采纳回答 6月26日
  • 创建了问题 6月23日