unity 安卓端使用JSON(LitJson)

注:!!!untiy 打包安卓平台不允许使用Unity自带的json工具Newtonsoft.Json

LitJson不支持float类型的字符。

LitJson支持的格式如下:

public JsonData(bool boolean);  
public JsonData(double number);  
public JsonData(int number);  
public JsonData(long number);
public JsonData(object obj) 
public JsonData(string str); 

需要让LitJson支持Float类型的方式:

    在Awake里面或者在初始化协程里面调用方法即可

/// <summary>
    /// LitJson数据转换,可使用Float
    /// </summary>
    private static void RegisterFloat()
    {
        void Exporter(float obj, JsonWriter writer)
        {
            writer.Write(obj);
        }

        JsonMapper.RegisterExporter((ExporterFunc<float>)Exporter);

        float Importer(double obj)
        {
            return (float)obj;
        }

        JsonMapper.RegisterImporter((ImporterFunc<double, float>)Importer);
    }

安卓端,IOS,PC的JSON转换(通用)

using LitJson;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.Networking;public class JsonManager : SingleMono<JsonManager>
{public AllShengLingManagers allShengLing;  //生灵列表public string path; //Json存放路径void Start(){//初始化JsonStartCoroutine(LoadSave("人族"));}void Update(){if (Input.GetKeyDown(KeyCode.V)){for (int i = 0; i < allShengLing.ShengLingList.Count; i++){Debug.Log(allShengLing.ShengLingList[i].name);}}}/// <summary>/// 初始化人物操作/// </summary>/// <param name="name">种族名称</param>/// <returns></returns>public IEnumerator LoadSave(string name){RegisterFloat();    //可使用Float类型数据path = Application.persistentDataPath +"/"+ "AllShengLing.json";       //allShengLing = new AllShengLingManagers();//初始化生灵//allShengLing.ShengLingList = new List<ShengLing>();  //初始化UnityWebRequest www = UnityWebRequest.Get("file://" + path);    //获取路径yield return www.SendWebRequest();  //发生请求if (www.result == UnityWebRequest.Result.Success){var fileJson = www.downloadHandler.text;    //读取JSON文件Debug.Log(fileJson);Debug.Log($"数据存在---");StreamReader r = new StreamReader(path);    // 读string srRTE = r.ReadToEnd();Debug.Log("<color=#ff7f00>" + "Json配置文件内容:" + "</color>" + srRTE);allShengLing = JsonMapper.ToObject<AllShengLingManagers>(srRTE);    //反序列化生灵列表r.Close();  //关闭文本if (allShengLing == null){Debug.Log("Json为空");}else //有数据的话,把各个种族的数据初始化{for (int i = 0; i < allShengLing.ShengLingList.Count; i++){if (CSVTest.instance.names.Contains(allShengLing.ShengLingList[i].name))  //判断名字是否相等,然后给到值,初始化{//某个UI等于该数据的数值}}             //for (int i = 0; i < CSVTest.instance.names.Count; i++)  //查找names里面有没有这个名字//{//    if (CSVTest.instance.names[i].Equals(name)) //循环遍历列表里面的名字是不是叫name,是的情况下就加成并退出循环//    {//        allShengLing.ShengLingList[i].AllZhanLi += 10000;   //总战力+10000//        allShengLing.ShengLingList[i].AllSum += 10000;  //总人数+10000//        break;//    }//}                }}else{Debug.Log("没有该生灵的Json文件,正在生成该数据");//初始化生灵数据Init(name);}}/// <summary>/// 初始化生灵/// </summary>public void Init(string name){ShengLing sl = new ShengLing();sl.name = name;sl.LeveL = 1;sl.QiangZhe = 0;sl.QiWu = 0;sl.MiFa = 0;sl.XieMai = 0;sl.AllSum = 10000;sl.AllZhanLi = 10000;allShengLing.ShengLingList.Add(sl);CSVTest.instance.names.Add("人族");GameManagers.instance.SaveRoleData(allShengLing, "AllShengLing.json");}/// <summary>/// LitJson数据转换,可使用Float/// </summary>public   void RegisterFloat(){void Exporter(float obj, JsonWriter writer){writer.Write(obj);}JsonMapper.RegisterExporter((ExporterFunc<float>)Exporter);float Importer(double obj){return (float)obj;}JsonMapper.RegisterImporter((ImporterFunc<double, float>)Importer);}/// <summary>/// 删除对象/// </summary>/// <param name="name">要删除的名字</param>public void RemoveShuJu(string name){for (int i = 0; i < allShengLing.ShengLingList.Count; i++){var item = allShengLing.ShengLingList[i];   //要删除的对象if (item.name.Equals(name)){allShengLing.ShengLingList.Remove(item);GameManagers.instance.SaveRoleData(allShengLing, "AllShengLing.json");}}}}

保存JSON脚本展示,放入单例脚本中,方便调用

/// <summary>/// Json保存/// </summary>/// <typeparam name="T">数据类型</typeparam>/// <param name="data">对象</param>public void SaveRoleData<T>(T data,string name){Debug.Log("数据保存");string path = Application.persistentDataPath + "/"+ name;string saveJsonStr = JsonMapper.ToJson(data);   //序列化JSON文件,写入JsonFile.WriteAllText(path, saveJsonStr);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/71901.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【HTML5高级第三篇】drag拖拽、音频视频、defer/async属性、dialog应用

文章目录 一、拖拽事件1.1 拖拽事件1.2 案例&#xff1a;拖拽丢弃图片 二、音频和视频三、defer 与 async 属性3.1 概述3.2 示例一&#xff1a;3.3 示例二&#xff1a; 四、dialog 元素 一、拖拽事件 原生JavaScipt案例合集 JavaScript DOM基础 JavaScript 基础到高级 Canvas…

React 全栈体系(四)

第二章 React面向组件编程 六、组件的生命周期 1. 效果 需求:定义组件实现以下功能&#xff1a; 让指定的文本做显示 / 隐藏的渐变动画从完全可见&#xff0c;到彻底消失&#xff0c;耗时2S点击“不活了”按钮从界面中卸载组件 <!DOCTYPE html> <html lang"e…

ES6常用新特性

ES6改动很大&#xff0c;可以简单分为四类 1、解决原有语法的缺陷和不足 例如&#xff1a;let&#xff0c;const 2、对原有语法进行增强 解构、扩展、模板字符串 3、新增对象、全新的方法&#xff0c;全新的功能 Object.assign()、Proxy对象代理、Reflect 等等 4、全新的数据类…

手写题目3:算出一个dom里面所有元素的节点数

算出一个dom里面所有元素的节点数 start 获取一个dom元素内的所有节点数。 代码 // 递归函数 function countNodes(node) {// 计算自身var count 1;// 判断是否存在子节点if (node.hasChildNodes()) {// 获取子节点var cnodes node.childNodes;// 对子节点进行递归统…

elasticsearch的索引库操作

索引库就类似数据库表&#xff0c;mapping映射就类似表的结构。我们要向es中存储数据&#xff0c;必须先创建“库”和“表”。 mapping映射属性 mapping是对索引库中文档的约束&#xff0c;常见的mapping属性包括&#xff1a; type&#xff1a;字段数据类型&#xff0c;常见的…

蓝桥杯官网填空题(矩形切割)

题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 小明有一些矩形的材料&#xff0c;他要从这些矩形材料中切割出一些正方形。 当他面对一块矩形材料时&#xff0c;他总是从中间切割一刀&#xff0c;切出一块最大的…

[论文笔记]A COMPARE-AGGREGATE MODEL FOR MATCHING TEXT SEQUENCES

引言 今天带来论文A COMPARE-AGGREGATE MODEL FOR MATCHING TEXT SEQUENCES的阅读笔记。 很多NLP任务,包括阅读理解、文本蕴含和问答任务,都需要在序列之间进行比较。匹配序列间重要的单位是这些解决这些任务的关键。本篇工作提出了一个通用的比较聚合(compare-aggragate)框…

Docker Compose常用命令

常用命令 1.1 restart, start, stop-- 启动和停止服务 命令必须在 docker-compose.yml文件所在的目录下执行。 # 前台启动, 启动项目中的所有服务。 $. docker-compose up# 后台启动, 启动所有服务并在后台运行。 $. docker-compose up -d# 停止所有服务。 $. docker-compose …

大数据课程K18——Spark的ALS算法与显式矩阵分解

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 掌握Spark的ALS算法与显式矩阵分解; ⚪ 掌握Spark的ALS算法原理; 一、ALS算法与显式矩阵分解 1. 概述 我们在实现推荐系统时,当要处理的那些数据是由用户所提供的自身的偏好数据,这些…

什么是机器学习中的监督学习和无监督学习,举例说明

1、什么是机器学习中的监督学习和无监督学习&#xff0c;举例说明。 监督学习&#xff1a; 监督学习是一种机器学习的方法&#xff0c;它通过已知的数据&#xff08;即训练数据&#xff09;来预测未知的数据&#xff08;即测试数据&#xff09;。例如&#xff0c;一个监督学习…

k8s node环境部署(三)

1、添加node1、node2环境 前面配置master环境的截图最后一段 复制下来 分别在node主机执行 kubeadm join 192.168.37.132:6443 --token p5omh3.cqjqt8ymrwkdn2fc \ --discovery-token-ca-cert-hash sha256:608a1cbadd060cfdeac2fae84c19609061b750ab51bf9a19887ff7ea…

Ubuntu之apt-get系列--安装JDK8--方法/教程

原文网址&#xff1a;Ubuntu之apt-get系列--安装JDK8--方法/教程_IT利刃出鞘的博客 简介 本文介绍如何在Ubuntu下安装JDK8。 验证是否安装 可以通过如下命令判断系统是否有安装ssh服务&#xff1a; 命令 java -version 结果 如上所示&#xff0c;表示还没有安装。 查看…

实训三:多表查询 - 大学数据库创建与查询实战

大学数据库创建与查询实战 第1关&#xff1a;数据库表设计任务描述相关知识大学数据库的整体设计教师信息表&#xff08;instructor&#xff09;开课信息表&#xff08;section&#xff09; 编程要求测试说明参考代码 第2关&#xff1a;查询&#xff08;一&#xff09;任务描述…

从零开始学习软件测试-第38天笔记

接口测试 什么是接口 接口是两个独立部件共享信息的边界&#xff0c;测试中常说的接口大部分是web接口。web接口是遵循了http或者https协议的URL。 数据的流转过程 由客户端通过接口将数据发送给服务器。服务器收到数据之后&#xff0c;取出想要的数据&#xff0c;拼装成一…

[虚幻引擎插件介绍] DTGlobalEvent 蓝图全局事件, Actor, UMG 相互回调,自由回调通知事件函数,支持自定义参数。

本插件可以在虚幻的蓝图 Actor&#xff0c; Obiect&#xff0c;UMG 里面指定绑定和执行消息&#xff0c;可带自定义参数。 参数支持 Bool&#xff0c;Byte&#xff0c;Int&#xff0c;Int64&#xff0c;Float&#xff0c;Name&#xff0c;String&#xff0c;Text&#xff0c;Ve…

Ubuntu 20.04 LTS 安装Kubernetes 1.26

1、环境配置 (1)添加主机名称解析记录 cat > /etc/hosts << EOF 192.168.44.200 master01 master01.bypass.cn 192.168.44.201 node01 node01.bypass.cn 192.168.44.202 node02 node02.bypass.cn EOF(2)禁止K8s使用虚拟内存 swapoff -a sed -ri s(.*swap.*)#\1…

常见关系型数据库SQL增删改查语句

常见关系型数据库SQL增删改查语句&#xff1a; 创建表&#xff08;Create Table&#xff09;&#xff1a; CREATE TABLE employees (id INT PRIMARY KEY,name VARCHAR(50),age INT,department VARCHAR(50) ); 插入数据&#xff08;Insert Into&#xff09;&#xff1a; INSERT …

sqlite3 是一个命令行工具,用于与 SQLite 数据库进行交互和管理

通过在终端或命令提示符中键入 sqlite3 命令&#xff0c;可以启动 sqlite3 工具并连接到指定的 SQLite 数据库文件。 连接成功后&#xff0c;你将获得一个交互式的命令行界面&#xff0c;可以在其中执行各种数据库操作。使用 sqlite3 命令时&#xff0c;可以提供以下参数&#…

自然语言处理:提取长文本进行文本主要内容(文本意思)概括 (两种方法,但效果都一般)

本文主要针对长文本进行文本提取和中心思想概括&#xff0c;原文档放在了附件里面&#xff1a;<科大讯飞公告> -----------------------------------方法一&#xff1a;jieba分词提取文本&#xff08;句子赋分法&#xff09;------------------------- 1、首先导入相关…

【车载开发系列】诊断故障码中的扩展数据

【车载开发系列】诊断故障码中的扩展数据 诊断故障码中的扩展数据 【车载开发系列】诊断故障码中的扩展数据一. 扩展数据概念二. DemDataElementClass对象三. DemInternalDataElement对象四. DemExtendedDataClass五. DemExtendedDataRecordClass1)DemExtendedDataRecordNumbe…