【教程】Unity 官配 JsonUtility 使用指南

这篇具有很好参考价值的文章主要介绍了【教程】Unity 官配 JsonUtility 使用指南。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

开发平台:Unity 2020
编程平台:Visual Studio 2020
编程语言:CSharp

一、前言


  处理 Json 数据,在目前多元化的 Json 处理插件上显得简单易用。而 JsonUtility 作为 Unity 官方坐镇的 Json 数据处理软件。必然有其存在的原因。

二、你需要知道 JsonUtility 支持的可序列化数据类型


  • 支持数字数据类型:intfloatdoubledecimallong
    包括 uintfloat2x4double2 等数据类型
  • 支持字符数据类型:charstring
  • 【特别】支持 Vector 数据类型
    包括 Vetor2Vector3Vector2x2 等数据类型
  • 【特别】支持 Quateration 四元数数据类型
  • 【特别】支持 public 访问类型的类、字段
  • 【特别】支持 SerializeField 特性指引的类、字段

三、JsonUtility 类方法说明


  • toJson(object target, bool prettyPrint)
    • object:对象转换为 Json 数据文本
    • prettyPrint:决定最终的 Json 数据文本是否是一个格式化后的数据文本。
      即是否使用 Json 文本的 Format 化。
  • FromJson(string text)
    1. 将 Json 数据文本转存至类中 public 或 附有 SerializeField 特性的字段上赋值。
    2. 使用时无需管理值具体分配。其将基于字段命名自行匹配并赋值。
  • FromJsonOverwrite(string text, object objectToOverwrite)

四、JsonUtlity 相关特性注意项


特性01:仅支持 MonoBehaviour / ScriptableObject 继承类的序列化

  不同于程序界流行的其他 Json 数据处理插件。JsonUitlity 是 Unity 专用于处理 MonoBeheviour / ScriptableObject 的数据处理工具。对于非限定继承对象的数据处理,例如 父类继承 MonoBehaviour,子类继承父类,仍然可序列化。

特性02:仅支持 [Serializable] 的普通类与结构体

[Serializable]
public class JsonData
{
	public string JsonName;
	public List<JsonItem> JsonContent;
	public string ResponseCode;
}

[Serializable]
public struct JsonItem { public string DataName; public int DataValue; }

特性 02:仅序列化 public 或 [SerializeField] 标签的字段

  对于同 public 访问类型的属性,例如 public string Description { get; set; } = "Hello" 无法序列处理为 Json 数据格式。

public class ChararcterInfo : MonoBehaviour
{
	public string Name = "Json Test";
	public int Age = 18;
	public Vector3 CurrentPosition = Vector3.zero;
	public Vector3 CurrentEnlerAngle = Vector3.zero;
	public Vector3 CurrentSize = Vector3.one;


	public void Start() => Debug.Log(JsonUtlity.toJson(this));
}

解析后

{"Name":"Json Test","Age":18,"Position":{"x":0.0,"y":0.0,"z":0.0},"EulerAngle":{"x":0.0,"y":0.0,"z":0.0},"Size":{"x":1.0,"y":1.0,"z":1.0}}

  同理,使用 [NoSerialized] 特性将忽略此字段的 Json 序列化流程。

2023/1/3 存疑点:

  • 属性 public 字段 private 是否会参与 Json 序列过程。 仅字段支持
  • 属性 private (+ SerilizeFiled) 字段 public 是否会参与 Json 序列过程。 参与

特性03:支持 List、Array 数据类型,但不支持 Dictionary、Query、Stack 等集合

public class JsonBaseData : MonoBehaviour
{
	public int[] DataIntArray;
	public List<int> DataIntList;
	public Dictionary<int, int> DataIntDic;
	public Query<int> DataIntQue;
}

  逐一使用上述行进行 JsonUtility.ToJson(this) 转换至 Json 数据格式。可以发现 Dictonary、Query、Stack 均无法被序列化。(尚未对集合内其他数据类型进行测试,预计均无法被序列化)

注意:类型均为常规数据类型 或 继承有 MonoBehaviour/ScriptableObject 的类与父类。

特性04:支持 Enum 枚举,但默认存储值为数值类型

public class JsonBase : MonoBehaviour
{
	public TeamType TeamType = TeamType.None;
}

public enum TeamType { TeamA, TeamB }

{ “TeamType”: 0 }

  枚举值的计算按照 2^n 进行区别。有时期望于枚举使用 string 数据类型作为替代。则需要使用第三方 Json 数据工具处理,因为 JsonUtlity 仅针对 MonoBehaviour/ScriptableObjectSerializable应用特性的类、结构体 下的 public 字段对象。

评估:JsonUtility 的适用环境

  JsonUtility 是针对 Unity 场景内挂载脚本对象信息的最佳Json处理类方法,在记录场景对象信息上有着绝对的便利性。例如,适用该类存储某对象的 Component 信息,并创建一个新的对象,为其赋予属性内容。于是对于游戏缓存角色数据方面有着或多少的应用。例如:当前角色的 Transform 信息。文章来源地址https://www.toymoban.com/news/detail-812335.html

到了这里,关于【教程】Unity 官配 JsonUtility 使用指南的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [Unity]VRTK_v4使用指南(配置)和Pico 4开发笔记(SteamVR)

    1这些插件的关系 先随便讲一下这些插件的关系和使用,我只使用过PICO4,所以一起都是基于pico4设备来说的 1.1.1  PICO SDK+XRI 首先在pico自带的安卓平台上面开发,需要使用pico的sdk作为输入输出,然后使用XRI包,这个包里面帮我们写好了很多函数,比如传送和抓取,所以开发很

    2024年02月08日
    浏览(52)
  • 【unity小技巧】Unity 存储存档保存——PlayerPrefs、JsonUtility和MySQL数据库的使用

    游戏存档不言而喻,是游戏设计中的重要元素,可以提高游戏的可玩性,为玩家提供更多的自由和控制权。看完这篇文章就可以构建属于自己的存储系统了。 它是一个仅仅可以存储字符串、浮点数和整数值数据的类 保存

    2024年02月08日
    浏览(64)
  • Unity PlayerPrefs、JsonUtility

    Unity中有两个常用的数据存储方式:PlayerPrefs和JsonUtility。 PlayerPrefs PlayerPrefs是Unity内置的一种轻量级数据存储方式,可用于存储少量的游戏数据,如分数、解锁状态等。使用PlayerPrefs需要注意以下几点: 存储数据时,需要使用字符串作为键(key)和值(value)。 存储的值只能

    2024年02月13日
    浏览(42)
  • 【Unity】【Json解析】JsonConvert和JsonUtility的异同

    JsonUtility的FromJson和JsonConvert的DeserializeObject方法都能够用来将字符串解析成对象,用法分别是: LevelProperty rawArray = JsonConvert.DeserializeObjectLevelProperty(originString); LevelProperty rawArray = JsonUtility.FromJsonLevelProperty(originString); 但JsonUtility不支持将字符串解析为数组,也就是说以下写法是

    2024年02月13日
    浏览(46)
  • Unity 数据读取|(四)Json文件解析(Newtonsoft.Json ,Litjson,JsonUtility,SimpleJSON)

    JSON文件是一种纯文本文件,用于存储数据,并且是基于JavaScript的一个子集。JSON文件通常用于存储和传输数据,以及在应用程序之间交换信息。它们以键值对的形式存储数据,其中键是字符串,值可以是字符串、数字、布尔值、数组、对象或null。 JSON文件通常具有.json扩展名

    2024年02月05日
    浏览(64)
  • 【12】Git工具 协同工作平台使用教程 Gitee使用指南 腾讯工蜂使用指南【Gitee】【腾讯工蜂】【Git】

    tips:少量的git安装和使用教程,更多讲快速使用上手Gitee和工蜂平台      Git - Downloads (git-scm.com) 找到对应操作系统,对应版本,对应的位数   下载后根据需求自己安装,然后用git --version验证是否成功   使用 SSH 密钥可以让你在与 Git 服务器进行通信时,实现更安全的身份

    2024年02月13日
    浏览(47)
  • iPhone 隔空投送使用指南:详细教程

    本文介绍了如何在iPhone上使用隔空投送,包括如何在iOS 11到iOS 14的iPhone上启用它、发送文件以及接受或拒绝AirDrop发送给你的文件。对于iOS 7以上的旧款iPhone,提供了另一种方法。 你可以通过以下两种方式之一启动隔空投送功能:在“设置”应用程序或控制中心。该服务通过蓝

    2024年02月09日
    浏览(37)
  • Postman使用方法指南,最全面的教程

    Postman使用教程 一、Postman介绍 ​ Postman是一个英语单词,名词,作名词时意为“邮递员;邮差”。 ​ Postman是一个接口测试工具,在做接口测试的时候,Postman相当于一个客户端,它可以模拟用户发起的各类HTTP请求,将请求数据发送至服务端,获取对应的响应结果, 从而验证响应中的

    2024年02月06日
    浏览(50)
  • PyCharm 使用教程:PyCharm常用技巧指南,轻松学会

    在 PyCharm 中,打开已有的项目有 3 种方式。 欢迎界面中选择 open 菜单栏中选择 File-open 打开远程 Git 的项目 在 PyCharm 中,打开已有的项目可以在第一次打开的欢迎界面中选择 open 来打开你电脑中已经创建过的项目: 菜单栏中选择 File-open 选择已有的项目 获取仓库地址中的项目

    2024年02月06日
    浏览(55)
  • 阿里云无影云电脑使用教程(3分钟新手指南)

    ​阿里云无影云电脑即无影云桌面,云桌面如何使用?云电脑创建后没有用户名和密码,先创建用户设置密码,才可以登录连接到云桌面。云桌面想要访问公网还需要开通互联网访问功能。阿里云百科来详细说下阿里云无影云电脑从选择、创建用户名密码和访问互联网全过程

    2024年02月10日
    浏览(204)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包