Unity零基础到入门☀️| Unity中的数据存储JSON
📢前言
- 本文章是Unity零基础到入门专栏的系列文章
- 适合对
Unity3D引擎
感兴趣的小伙伴学习,偏向于新手学习! - 本篇文章就来介绍一下Unity中三种基本的数据存储方式:
PlayerPrefs
、XML
、JSON
- 由于是偏向于
新手教程
,所以不会介绍的很深刻,看完之后掌握 基本的数据读取 就足够了! - 下面一起来看一下吧!暂时没时间看可以直接
点赞收藏不迷路
,让你快速学会不加班!
🎥Json
本文说的三种数据存储方式,Json
其实是最常用也是目前用的比较多的一种,超轻量级,可便捷性使用
平时用到比较多的都是解析Json和往Json中添加数据、修改数据等等
下面一起来看一下具体怎样使用Json保存数据!
🏁Json简介
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。
它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
在Unity中大致有三种使用Json的方式
分别是使用类库的两种:System.Json
(便于JSON⽣成) 和 LitJson
(便于JSON解析)
还有一种是 UnityEngine.JsonUtility
其中前两种都需要将System.Json.dll
或 LitJson.dll
两个dll文件放到Unity的Plugins
文件夹中才能使用相应的命名空间和方法
UnityEngine.JsonUtility则可以直接使用其中的方法
🏁Json语法规则
✨数据都放置到一个大括号里
✨一对对的数据放到大括号里
✨一个个的数据放到中括号里
✨一个大括号或一个中括号都可以表示一个值
✨数据与数据之间用逗号分隔
✨Key必须要用引号引起来
✨Value如果是字符串要用引号引起来
✨最后一个数据后面不要加逗号
✨数据保存在键值对中
Json语法示例:
{"students":[
{
"name":"albert",
"age":19,
"sex":"M"
},
{
"name":"mary",
"age":11,
"sex":"W"
}
]
}
解析成实体类后:
public class StudentsItem
{
public string name { get; set; }
public int age { get; set; }
public string sex { get; set; }
}
public class Root
{
public List <StudentsItem > students { get; set; }
}
由于Json对字符串的格式非常严格,输入一个字符错误都不行,所以我们可以使用相关的Json转换网站进行格式转换
https://www.json.cn/json/json2csharp.html这个网站就可以实现JSON数据转实体的功能
这样我们就可以省去一些麻烦事了!
📒System.Json
先来说一下 System.Json
的基本用法
System.Json是一种类库,当我们在Unity中导入System.Json.dll
文件后就可以使用System.Json.dll json命名空间
可以用到的类:JsonArray、JsonObject、JsonPrimitive、JsonValue。枚举:JsonType
具体操作,在Unity中新建一个Plugins文件夹,然后将dll文件放入即可
类 | 说明 |
---|---|
JsonArray | JsonArray 是0个或更多的 JsonObject 对象的有序序列 |
JsonObject | JsonObject 是一个无序的0个或更多的 键/值对 的集合 |
JsonValue | 具体的Value值 |
生成Json的示例方法:
下面来对Unity中的Transform面板做一个示例生成对应的Json文件
using System.Json;
using UnityEngine;
public class JsonTest : MonoBehaviour
{
void Start()
{
//创建⼀个JSON对象,相当于⼀个⼤括号
JsonObject jsonTransform = new JsonObject();
//创建⼀个JSON值对象,存储⼀个Value
JsonValue jsonPosition = "10,20,30";
//JSON对象,也就是⼤括号,添加⼀个key:value
jsonTransform.Add("position", jsonPosition);
//打印结果
Debug.Log(jsonTransform.ToString());
//定义⼀个值数组,⽤来存储,中括号中的⼀个个的值
JsonValue[] rotationXYZ = new JsonValue[] { 20, 30, 40 };
//将这个数组中的⼀个个的值放到JsonArray数组对象中
JsonArray jsonRotation = new JsonArray(rotationXYZ);
//⼀个JsonArray对象,也可以是⼀个Value,
//所以可以⽤jsonTransform来Add
jsonTransform.Add("rotation", jsonRotation);
//打印结果
Debug.Log(jsonTransform);
JsonObject x = new JsonObject();
x.Add("x", 10);
JsonObject y = new JsonObject();
y.Add("y", 20);
JsonObject z = new JsonObject();
z.Add("z", 30);
//实例⼀个jsonValues数组(所有类型都可以转换成jsonValue)
JsonValue[] scaleXYZ = new JsonValue[] { x, y, z };
//将实例好了的数组,添加到jsonArray对象中,形成⼀个jsonArray对象
//作⽤在于给这个整体,添加⼀个中括号[]
JsonArray jsonScale = new JsonArray(scaleXYZ);
//将这个整体,放⼊到jsonTransform中
jsonTransform.Add("scale", jsonScale);
//打印结果
Debug.Log(jsonTransform);
}
}
打印结果:
📒LitJson
ListJson
和 System.Json
一样,都需要先在Unity的Plugins文件夹导入LitJson.dll
文件才可以使用其中的API方法
常用API方法如下:
- ✨把对象转化成 JSON格式字符串: JsonMapper.ToJson
- ✨把JSON格式字符串转化成对象: JsonMapper.ToObject
- ✨把JSON格式字符串转化成指定类的对象:JsonMapper.ToObject<T>
📒UnityEngine.JsonUtility
JsonUtility
是Unity内置的用于解析Json的方法,跟LitJson
用法很像
而且不需要导入dll文件就可以直接使用,应用于平时一些小项目开发使用到Json的时候完全可以够用啦!
下面来说一下JsonUtility的几种常用方法
🏴生成Json文件
我们写一个字段类Person,类里面有string类型的“Name”和int类型的“Age”
using System.IO;
using UnityEngine;
[System.Serializable]
class Person
{
public string Name;
public int Age;
}
[System.Serializable]
class Data
{
public Person[] Person;
}
public class NewBehaviourScript : MonoBehaviour
{
void Start()
{
WriteData();
}
//写数据
public void WriteData()
{
//新建一个数据类
Data m_Data = new Data();
//新建一个字段类 进行赋值
m_Data.Person = new Person[3];
for (int i = 0; i < 3; i++)
{
Person m_Person = new Person();
m_Person.Name = "User" + i;
m_Person.Age = 20 + i;
m_Data.Person[i] = m_Person;
}
//将数据转成json
string js = JsonUtility.ToJson(m_Data);
//获取到项目路径
string fileUrl = Application.dataPath + "\\jsonInfo.txt";
//打开或者新建文档
using (StreamWriter sw = new StreamWriter(fileUrl))
{
//保存数据
sw.WriteLine(js);
//关闭文档
sw.Close();
sw.Dispose();
}
}
}
生成的Json内容如下:
示例代码里面新建了两个数据实体类,一个Data 一个Person
它们都有特性:[System.Serializable],也就是序列化,只有加上这个特性,类里面的数据才能正常的转成Json数据。
🏴解析Json文件
先读取Json文件,使用IO命名空间下的File类的OpenText()函数进行读取
然后使用JsonUtility.FromJson进行解析
using System.IO;
using UnityEngine;
[System.Serializable]
class Person
{
public string Name;
public int Age;
}
[System.Serializable]
class Data
{
public Person[] Person;
}
public class NewBehaviourScript : MonoBehaviour
{
void Start()
{
string jsonData = ReadData();
Data m_PersonData = JsonUtility.FromJson<Data>(jsonData);
foreach (Person item in m_PersonData.Person)
{
Debug.Log(item.Name);
Debug.Log(item.Age);
}
}
//读取文件
public string ReadData()
{
//string类型的数据常量
string readData;
//获取到路径
string fileUrl = Application.dataPath + "\\jsonInfo.json";
//读取文件
using (StreamReader sr = File.OpenText(fileUrl))
{
//数据保存
readData = sr.ReadToEnd();
sr.Close();
}
//返回数据
return readData;
}
}
打印效果如下:
💬总结
- 本文简单讲解了Unity中常用的数据存取方式
JSON
- 将每个方式都简单的结合示例概述了一遍,没有往深了说
- 因为本文的受众就是偏向于
新手
,可以通过本篇文章来入门Unity中的这三种数据存取方式 - 其中
Json
使用的较多,后面还会考虑针对Json做一个更深一点的实例,敬请期待 - 如果觉得本文让你学到了东西,可以
点赞收藏
一下哦~ - 亦可以
关注文末卡片
,获取更多的Unity相关资源
,下次再见!
- 点赞
- 收藏
- 关注作者
评论(0)