在Unity中实现使用JSON保存数据

由于本人的英语水平过水,因此难免会出现变量名使用拼音命名,英文单词拼错等问题

但我准备了管够的注释,应该没问题吧

实现效果的代码我将其分为两部分

第一部分,我称之为数据仓库对象,负责数据的存入,读取,(如果后面需要加入删除功能也可以直接对其进行拓展)

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using System.IO;//C#系统的包  用于文件读写

public class DetaWarehouseObject : MonoBehaviour
{
    //这里是只负责读取 返回一个要求调用的结构体对象
      //DatwName是JSON文件保存后的文件名
    public static T  ReadDATE<T>( string DateName )
    {
         //JSON数据存放的地址
        string DatePath = Application.persistentDataPath + string.Format("/PlayerDate/{0}.json", DateName);

        //检查是否有保存的数据
        if (!File.Exists(DatePath))
        {
           // Debug.Log("空数据");
            //不存在请求的数据,返回一个空的对象
            return default(T);
        }

        else 
        {   //数据存在,读取并返回数据
            T A = JsonUtility.FromJson<T>( File.ReadAllText(DatePath) );
            return A ;
        }


    }



    //这里保存对象   WriteDateType是要保存的结构体对象,DatwName是JSON文件保存后的文件名
    public static void writeDATE<T>(T WriteDateType, string DateName) 
    {

        // 检查persistentDataPath 路径下的PlayerDate文件夹是否存在
        if (!File.Exists(Application.persistentDataPath + "/PlayerDate"))
        {
            System.IO.Directory.CreateDirectory(Application.persistentDataPath + "/PlayerDate");  //没有就创建一个
        }

        string jsonData = JsonUtility.ToJson(WriteDateType);//将结构体转换为JSON字符串
        //文件的路径
        string filePath = Application.persistentDataPath + string.Format("/PlayerDate/{0}.json", DateName);
        //未来可以加入加密功能
        File.WriteAllText(filePath, jsonData);//写入文件
        Debug.Log("保存结束");


    }





}

第二部分 游戏进行时保存数据的对象,使用一个结构体保存,并且在游戏一开始时将会调用数据仓库对象类试图读取已保存的数据

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SetDate : MonoBehaviour
{

    public static SitDateStruct SetDateObject;//游戏数据的对象
    void Start()
    {
       //Debug.Log("开始测试"+ SetDateOIbject.GunShootVolume);
        //SetDateOIbject.GunShootVolume = 114514;//测试模拟初始化
        //DetaWarehouseObject.writeDATE<A>(SetDateOIbject,"SetDate");//存入的测试
        SetDateObject = DetaWarehouseObject.ReadDATE<SitDateStruct>("SetDate");//初始化数据库
        //Debug.Log("读取测试"+SetDateOIbject.GunShootVolume);
    }



    [System.Serializable]//序列化的属性
    public struct SetDateStruct 
    { 
     public float PlayerVolume;
     public float BGMVolume;
     public float DiRenVolume;
     public bool IsNoVolume;

    }



}

当想要保存数据时,直接调用数据仓库对象类并传入对应数据的结构体对象和其JSON

文件将使用的名字就行了

大概就这样吧,如果对以上的内容有疑问或发现有错误需要改进的地方,欢迎提问与指正

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Unity使用Newtonsoft.Json保存Vector类型需要进行以下步骤: 1. 首先,确保你已经在Unity项目添加了Newtonsoft.Json库。你可以从Unity Asset Store或者Github上下载这个库。 2. 在你需要保存Vector的脚本,首先引入Newtonsoft.Json命名空间。 ```c# using Newtonsoft.Json; ``` 3. 定义一个Vector类型的变量并给它赋值。 ```c# Vector3 vector = new Vector3(1, 2, 3); ``` 4. 使用JsonConvert.SerializeObject方法将Vector对象转换为JSON字符串。 ```c# string json = JsonConvert.SerializeObject(vector); ``` 5. 将生成的JSON字符串保存到文件,你可以使用File.WriteAllText方法来实现。 ```c# string filePath = "vector.json"; File.WriteAllText(filePath, json); ``` 6. 如果需要加载保存的Vector,我们可以使用JsonConvert.DeserializeObject方法将JSON字符串转换回Vector对象。 ```c# string loadedJson = File.ReadAllText(filePath); Vector3 loadedVector = JsonConvert.DeserializeObject<Vector3>(loadedJson); ``` 这样,你就可以成功地使用Newtonsoft.Json保存和加载Vector类型了。 注意:在使用Newtonsoft.Json库时,需要确保你已经正确安装并添加了相关引用,以便能够引用正确的命名空间和方法。 ### 回答2: Unity可以使用Newtonsoft.Json保存Vector类型。Newtonsoft.Json是一个流行的JSON序列化和反序列化库,可以轻松地将对象转换为JSON格式并保存。 要保存Vector类型,首先需要安装Newtonsoft.Json库。您可以在Unity Asset Store或Newtonsoft官方网站上找到并下载该库。 安装完毕后,可以使用以下代码将Vector类型转换为JSON字符串并保存: ```csharp using UnityEngine; using Newtonsoft.Json; public class SaveManager : MonoBehaviour { private Vector2 savedVector; private void Start() { // 假设此处是要保存的Vector2 Vector2 vectorToSave = new Vector2(1f, 2f); // 将Vector2对象转换为JSON字符串 string jsonString = JsonConvert.SerializeObject(vectorToSave); // 保存JSON字符串到文件或其他位置 // 这里仅示范输出到控制台 Debug.Log(jsonString); // 反序列化JSON字符串为Vector2对象 savedVector = JsonConvert.DeserializeObject<Vector2>(jsonString); // 输出反序列化后的Vector2 Debug.Log(savedVector); } } ``` 在上面的示例,我们使用JsonConvert.SerializeObject方法将Vector2对象转换为JSON字符串,并使用Debug.Log输出到控制台。我们还使用JsonConvert.DeserializeObject方法将JSON字符串反序列化为Vector2对象,并将其打印到控制台。 通过上述步骤,您可以使用Newtonsoft.Json保存Unity的Vector类型。 ### 回答3: Unity是一款强大的游戏开发引擎,它提供了许多实用的功能来简化开发过程。其一个重要的功能就是数据的序列化与反序列化。为了保存和加载Vector类型的数据,我们可以使用Newtonsoft.Json库。 首先,我们需要将Newtonsoft.Json库导入到Unity项目。这可以通过在Unity Asset Store下载并导入Newtonsoft.Json插件来完成。 接下来,在我们需要保存Vector类型数据的脚本,我们需要引入Newtonsoft.Json命名空间。命名空间的引入可以通过以下代码实现: ```csharp using Newtonsoft.Json; ``` 然后,我们可以使用JsonConvert.SerializeObject方法将Vector类型数据转换为JSON字符串,并将其保存到文件。下面是一个示例代码: ```csharp Vector3 vectorData = new Vector3(1.0f, 2.0f, 3.0f); string json = JsonConvert.SerializeObject(vectorData); File.WriteAllText("vectorData.json", json); ``` 上述代码将一个名为vectorData.json的文件保存到项目目录。该文件包含了Vector3类型的数据。 最后,如果我们想要加载保存的Vector类型数据,我们可以使用JsonConvert.DeserializeObject方法将JSON字符串转换回Vector类型。以下是一个示例代码: ```csharp string json = File.ReadAllText("vectorData.json"); Vector3 loadedVectorData = JsonConvert.DeserializeObject<Vector3>(json); ``` 上述代码将通过读取vectorData.json文件JSON字符串,并将其转换为Vector3类型的loadedVectorData变量。 使用Newtonsoft.Json保存和加载Vector类型数据是非常简单的。我们只需要导入库,将Vector类型数据转换为JSON字符串并保存,然后反过来将JSON字符串转换回Vector类型数据即可。这些步骤可以帮助我们在Unity轻松地保存和加载Vector类型数据

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值