unity 读写Json 配置文件

这个博客主要介绍了Unity中使用Newtonsoft.Json库来读取和设置配置文件(如Setting.json)的方法。ComponentConfig类包含了全屏、质量级别和触摸缩放速度等设置,并通过GetConfig()函数从本地JSON文件加载这些配置。同时,博客还展示了如何使用JObject扩展方法获取配置值,以及如何更新并保存JSON数据到本地文件。
摘要由CSDN通过智能技术生成
using System.Collections.Generic;
using System.IO;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;


public class ComponentConfig
{
    public static QualityLevel qualityLevel = QualityLevel.Perfect; // 设置质量(默认最高)
    public static bool FullScreen = true; //全屏
    public static float TouchZoomSpeed = 0.01f; //缩放速度

    public static void GetConfig()
    {
        //读取配置
        JObject res = GetFyData(Application.persistentDataPath + "/Setting.json");
        JToken resToken = (JToken)res;
        // 扩展JToken ,获取属性值
        string version = res.GetValueEx("Version", "");
        FullScreen = res.GetValueEx("FullScreen", false);
        qualityLevel = (QualityLevel)res.GetValueEx("qualityLevel", 0);
        TouchZoomSpeed = res.GetValueEx("TouchZoomSpeed", 0.01f); 
    }


    static void SetFyDataJson(string JsonDataPath, JObject jobj)
    {
        var path = Path.GetDirectoryName(JsonDataPath);
        if (!Directory.Exists(path))
        {
            Directory.CreateDirectory(path);
        }
        Debug.LogError($"缓存数据:{JsonDataPath}");

        using (FileStream fsWrite = new FileStream(JsonDataPath, FileMode.OpenOrCreate, FileAccess.Write))
        {
            byte[] buffer = System.Text.Encoding.Default.GetBytes(JsonConvert.SerializeObject(jobj));
            fsWrite.Write(buffer, 0, buffer.Length);
        }
    }

    static void SetFyDataJson(string JsonDataPath, KeyValuePair<string, JSONNode> data)
    {
        var path = Path.GetDirectoryName(JsonDataPath);
        if (!Directory.Exists(path))
        {
            Directory.CreateDirectory(path);
        }

        JObject jobj = new JObject();
        jobj[data.Key] = data.Value.ToString();

        Debug.LogError($"缓存数据:{JsonDataPath}");

        using (FileStream fsWrite = new FileStream(JsonDataPath, FileMode.OpenOrCreate, FileAccess.Write))
        {
            byte[] buffer = System.Text.Encoding.Default.GetBytes(JsonConvert.SerializeObject(jobj));
            fsWrite.Write(buffer, 0, buffer.Length);
        }
    }


    /// <summary>
    /// 缓存数据到本地
    /// </summary>
    /// <param name="fileName">文件名</param>
    /// <returns></returns>
    public static JObject GetFyData(string filePath)
    {
        string r = "";

        if (!File.Exists(filePath))
        {
            Debug.LogError($"not found config file in path : { filePath}");
            SetFyDataJson(filePath, new JObject());
            return new JObject();
        }
        using (System.IO.StreamReader file = System.IO.File.OpenText(filePath))
        {
            using (JsonTextReader reader = new JsonTextReader(file))
            {
                JObject o = (JObject)JToken.ReadFrom(reader);
                r = o.ToString();
            }
        }
        return JObject.Parse(r);
    }
}


public enum QualityLevel
{
    Low,
    Mid,
    High,
    Perfect
}

JToken  扩展

using Newtonsoft.Json.Linq;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public static class JObjectExtension
{
    public static string GetValueEx(this JToken token, string key, string defaultValue)
    {
        return (token[key] != null) ? token[key].ToString() : defaultValue;
    }

    public static float GetValueEx(this JToken token, string key, float defaultValue)
    {
        return (token[key] != null) ? float.Parse(token[key].ToString()) : defaultValue;
    }

    public static int GetValueEx(this JToken token, string key, int defaultValue)
    {
        return (token[key] != null) ? int.Parse(token[key].ToString()) : defaultValue;
    }

    public static bool GetValueEx(this JToken token, string key, bool defaultValue)
    {
        return (token[key] != null) ? bool.Parse(token[key].ToString()) : defaultValue;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值