Unity-基于JsonUtility的Json文件读写

发布时间:2026/10/3 2:08:41
Unity-基于JsonUtility的Json文件读写 前言在 Unity 开发中配置存档、参数、UI 状态、参数保存几乎都离不开 JSON 读写。Unity 自带JsonUtility原生、轻量、跨平台、打包无报错、零依赖。本篇给大家一套全网最简、可直接商用的 JSON 读写模板包含✅ 单数据读写✅ List 列表读写✅ 通用工具类全局一行调用✅ 所有坑点完整避坑✅ 适配编辑器 打包 Windows/安卓一、核心原理必看1. 核心 APIJsonUtility.ToJson()对象转 JSON 字符串保存JsonUtility.FromJson()JSON 字符串转对象读取2. 三条铁律99%报错的原因数据类必须加[Serializable]字段必须是public原生不支持直接 数组/List 顶层 JSON需要包装类二、最简完整代码可直接复制使用1. 数据模型类示例PLC配置using System; /// summary /// 可序列化的JSON数据模型 /// /summary [Serializable] public class PlcConfigData { public string Ip; public int Rack; public int Slot; public float Speed; public bool IsConnected; }2. 通用 JSON 工具类全局通用静态工具类项目放任意位置整项目通用。using UnityEngine; using System.IO; /// summary /// Unity 原生JSON读写工具类 /// /summary public static class JsonTool { /// summary /// 保存数据到JSON文件 /// /summary public static void SaveJsonT(T data, string path) { string json JsonUtility.ToJson(data, prettyPrint: true); File.WriteAllText(path, json); Debug.Log($JSON保存成功{path}); } /// summary /// 读取JSON文件 /// /summary public static T LoadJsonT(string path) { if (!File.Exists(path)) { Debug.LogWarning(JSON文件不存在); return default; } string json File.ReadAllText(path); return JsonUtility.FromJsonT(json); } }3. 调用示例一行保存、一行读取using UnityEngine; using System.IO; public class JsonTest : MonoBehaviour { // 持久化路径编辑器 打包通用 private string SavePath Path.Combine(Application.persistentDataPath, plcConfig.json); void Start() { // 1. 构造测试数据 PlcConfigData data new PlcConfigData() { Ip 192.168.0.1, Rack 0, Slot 1, Speed 35.5f, IsConnected false }; // 2. 保存JSON JsonTool.SaveJson(data, SavePath); // 3. 读取JSON PlcConfigData load JsonTool.LoadJsonPlcConfigData(SavePath); if (load ! null) { Debug.Log(读取IP load.Ip); Debug.Log(读取速度 load.Speed); } } }保存示例读取示例注意在Unity中脚本要能拖拽到游戏对象上需满足继承自MonoBehaviour这一硬性条件而要在Inspector中拖拽赋值字段则需要该字段为public或标记[SerializeField]。三、List/数组 列表数据读写高频需求重点坑Unity Json 不支持直接序列化 List 顶层对象解决方案外层套一个包装类1. 列表包装类using System; using System.Collections.Generic; [Serializable] public class DataListWrapper { public ListPlcConfigData DataList; }2. 列表保存读取示例using System.Collections.Generic; using System.IO; using UnityEngine; public class JsonTest : MonoBehaviour { // 持久化路径编辑器 打包通用 private string SavePath Path.Combine(Application.persistentDataPath, plcConfigList.json); void Start() { // 保存列表 DataListWrapper wrap new DataListWrapper(); wrap.DataList new ListPlcConfigData(); wrap.DataList.Add(new PlcConfigData() { Ip 192.168.0.2, Rack 0, Slot 2 }); JsonTool.SaveJson(wrap, SavePath); // 读取列表 DataListWrapper loadWrap JsonTool.LoadJsonDataListWrapper(SavePath); if (loadWrap ! null) { foreach (var item in loadWrap.DataList) { Debug.Log(item.Ip); } } } }保存示例读取示例四、JSON 文件位置在哪里编辑器路径C:\Users\你的用户名\AppData\LocalLow\公司名\项目名\AppData 是隐藏文件夹直接粘贴地址回车即可打开。五、全网最齐全的踩坑总结1. 类没有加 [Serializable]现象生成空 JSON{}读取全部为空、不报错解决必须加序列化特性2. 字段写成 private私有字段无法序列化JSON 不显示3. 保存立刻读取偶尔读不到磁盘写入延迟解决方案协程延迟读取4. 不能直接存 Dictionary原生不支持字典需要用 List 替代或 Newtonsoft.Json5. 不要用 dataPath 存档dataPath打包后只读必须用persistentDataPath六、优缺点总结✅ 优点零插件、原生自带跨平台 Windows / Android / IOS速度快、轻量、无冲突工业仿真、PLC项目、工具项目完全够用❌ 缺点不支持顶层数组不支持 Dictionary结语90% 的 Unity 存档、配置需求原生 JsonUtility 完全够用不需要第三方插件。本文这套工具类是最简、最稳通用模板。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询