Unity3D学习笔记(二十五):Json
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WriteClassToJson
{
//练习:把Json写成类
//{
// "name":"小明",
// "age":80,
// "isMan":false
//}
public class People
{
public string name;
public int age;
public bool isMan;
}
//{
// "name":"小明",
// "students":["A","B","C","D"]
//}
public class Teacher
{
public string name;
//public string[] students;
public List<string> students;
}
//{
// "name":"小明",
// "Car":{"name":"名图","color":"write","number":74110}
//}
public class PeopleCar
{
public string name;
public Car car;
}
public class Car
{
public string name;
public string color;
public int number;
}
//{
// "name":"小明",
// "house":
// [
// {"address":"门头沟","size":10}
// {"address":"珠海","size":80}
// {"address":"地中海","size":800}
// ]
//}
public class PeopleHouse
{
public string name;
public List<House> house;
}
public class House
{
public string address;
public float size;
}
//{
// "name":"小明",
// "friend":
// [
// ["哈士奇","中华田园犬","藏獒"],
// ["羊腰子","猪腰子","牛腰子"]
// ]
//}
public class PeopleFriend
{
public string name;
public List<List<string>> friend;
}
//练习:把类写成Json
//写出a,b,c,d对象的Json
class Program
{
static void Main(string[] args)
{
A a = new A();
a.name = "小明";
a.id = ;
a.sex = false;
//{
// "name":"小明",
// "id":1111112,
// "sex":false
//}
B b = new B();
b.name = "小明";
b.items = new List<string>() { "狗", "车", "腰子" };
//{
// "name":"小明",
// "items":[ "狗", "车", "腰子"]
//}
C c = new C();
c.name = "小明";
c.a = new A();
c.a.name = "小花";
c.a.id = ;
c.a.sex = true;
c.b = new B();
c.b.name = "骚粉";
c.b.items = new List<string>() { "狗", "车", "腰子" };
//{
// "name":"小明",
// "a":{ "name":"小花","id":21,"sex":true }
// "b":{ "name":"骚粉","items":[ "狗", "车", "腰子"] }
//}
D d = new D();
d.name = "小明";
d.items = new List<DItem>() { new DItem("房子", ), new DItem("车", ), new DItem("狗", ) };
//{
// "name":"小明",
// "items":
// [
// { "name":"房子", "id":1 },
// { "name":"车", "id":2 },
// { "name":"狗", "id":3 }
// ]
//}
E e = new E();
e.name = "小明";
e.type = EType.B;
//{
// "name":"小明",
// "type":1
//}
}
}
public class A
{
public string name;
public int id;
public bool sex;
}
public class B
{
public string name;
public List<string> items;
}
public class C
{
public string name;
public A a;
public B b;
}
public class D
{
public string name;
public List<DItem> items;
}
public class DItem
{
public string name;
public int id;
public DItem(string name, int id)
{
this.name = name;
this.id = id;
}
}
public class E
{
public string name;
public EType type;
}
public enum EType
{
A,
B,
C,
D
}
}
{
"playerName": "尼古拉斯·明",
"maxHP": 1000.0,
"currentHP": 300.0,
"maxExp": 1000.0,
"currentExp": 800.0,
"level": ,
"gold": ,
"diamonds":
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerData
{
public float atk;
public float defanse;
public float thump;
public float hp;
public float atmpk;
public float anger;
}
public class A
{
void CreatePlayerData()
{
PlayerData data = new PlayerData();
data.atk = ;
data.defanse = ;
data.thump = ;
data.hp = ;
data.atmpk = ;
data.anger = ;
}
}
//{
// "name":"小明",
// "class":"Unity3D1803",
// "age":80,
// "ID":007,
// "sex":false
//}
//{
// "items":["血瓶","蓝瓶","复活币","材料1","材料2"]
//}
////Object类型的数组
//{
// "array":["name","age",18,true,false]
//}


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ObjectToJson : MonoBehaviour {
// Use this for initialization
void Start () {
TestObjectToJson obj = new TestObjectToJson();
//把对象转换成Json字符串,第二个参数是否格式化输出
string str = JsonUtility.ToJson(obj, true);
Debug.Log(str);
} // Update is called once per frame
void Update () { }
public class Parent
{
public string myName;
[SerializeField]
protected bool isParent;
[SerializeField]
private int id;
public Parent()
{
myName = "Parent";
isParent = false;
id = ;
}
}
public class TestObjectToJson: Parent
{
public string name;
public int age;
[SerializeField]//特性,修饰的是下方的变量,证明这个变量是可序列化和反序列化的
private bool sex;//私有的变量,Json默认不转换
public bool Sex//属性保护字段,确保性别不可修改
{
get { return sex; }
}
public void Func()
{ }
public List<string> list;
[SerializeField]
private Friend friend;//如果类对象是私有的,还需要添加加[SerializeField]
public MyStruct stt;
public MyType type;
public Friend f1;
public TestObjectToJson()
{
this.name = "小明";
this.age = ;
this.sex = false;
list = new List<string>() {"哈士奇", "大金毛", "博美", "泰日天" };
friend = new Friend();
stt = new MyStruct(, true, "Struct");
type = MyType.B;
f1 = null;
}
}
[System.Serializable]//当一个类作为变量类型的时候,需要在定义类的时候,在类的上方加[System.Serializable]
public class Friend
{
public string name;
public string address;
public int id;
public Friend()
{
this.name = "小红";
this.address = "八宝山";
this.id = ;
}
}
[System.Serializable]
public struct MyStruct
{
public int id;
public bool isStruct;
private string name;
public MyStruct(int id, bool isStruct, string name)
{
this.id = id;
this.isStruct = isStruct;
this.name = name;
}
}
public enum MyType
{
A,
B,
C
}
}

结构体,和类相同,需要在定义结构体的时候,添加[System.Serializable]
枚举,枚举类型会自动转换成int数值

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class JsonToObject : MonoBehaviour {
// Use this for initialization
void Start () {
string json =
"{" +
"\"weight\":0.5," +
"\"name\":\"小明\"," +
"\"age\":\"18\"," +
"\"id\":\"1\"," +
"\"list\":[1,2,3,4,5]," +
"\"cl\":{\"name\":\"小花\",\"type\":\"2\"}" +
"}";
TestJsonToObject obj = JsonUtility.FromJson<TestJsonToObject>(json);
obj.Print();
} // Update is called once per frame
void Update () { }
public class TestJsonToObject
{
public string name;
public int age;
[SerializeField]
private int id;
[SerializeField]
private float weight;
public bool sex;
public List<int> list;
public MyClass cl;
public MyType type;
public void Print()
{
Debug.Log("name:" + this.name);
Debug.Log("age:" + this.age);
Debug.Log("id:" + this.id);
Debug.Log("weight:" + this.weight);
for (int i = ; i < list.Count; i++)
{
Debug.Log("list:" + list[i]);
}
Debug.Log("cl:" + cl.name);
Debug.Log("type:" + this.type);
}
}
[System.Serializable]
public class MyClass
{
public string name;
}
public enum MyType
{
A,
B,
C
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
public class SaveManager
{
private static SaveManager instance;
public static SaveManager Instance
{
get
{
if (instance == null)
{
instance = new SaveManager();
}
return instance;
}
}
private SaveManager() { }
/// <summary>
/// 游戏一启动初始化数据
/// </summary>
public void InitData()
{
Debug.Log("初始化数据");
//从文件中读取数据解析成PlayerData对象, 再把解析完成的对象给PlayerData的单例
Debug.Log(Application.streamingAssetsPath);
//Application.persistentDataPath
string playerJson = FileTools.ReadFile(Application.streamingAssetsPath + @"\PlayerData.txt");
Debug.Log(playerJson);
if (playerJson == "")
{
//如果Json为“”
}
else
{
PlayerData data = JsonUtility.FromJson<PlayerData>(playerJson);
//把从Json中解析的对象给PlayerData的单例
PlayerData.SetInstance(data);
}
}
/// <summary>
/// 关闭游戏保存数据
/// </summary>
public void SaveData()
{
Debug.Log("存储数据");
//在关系游戏时,需要把最新的数据写入到文件中去
//1.把对象转换成Json
string json = JsonUtility.ToJson(PlayerData.Instance, true);
//2.把转换之后的json写入到文件中
FileTools.WriteFile(Application.streamingAssetsPath + @"\PlayerData.txt", json);
}
}
GameManager,继承Mono,管理启动关闭
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameManager : MonoBehaviour
{
// Use this for initialization
void Awake()
{
DontDestroyOnLoad(gameObject);//保证任何场景都有GameManager
//游戏一开始初始化数据
SaveManager.Instance.InitData();
}
void OnDestroy()
{
//因为他在场景切换的时候是不销毁的,所以如果OnDestroy被调用了,一定是关闭游戏的时候
//游戏关闭的时候需要调用 存档
SaveManager.Instance.SaveData();
}
}
FileTools,工具类,负责读取和写入,using System.IO;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
/// <summary>
/// 这个类的作用,就是读取和写入数据
/// </summary>
public static class FileTools
{
/// <summary>
/// 从文件中读取数据
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
public static string ReadFile(string path)
{
if (!File.Exists(path))
{
return "";
}
string json = "";
StreamReader sr = new StreamReader(path, System.Text.Encoding.UTF8);
try
{
json = sr.ReadToEnd();
}
catch (System.Exception e)
{
Debug.Log(e.ToString());
}
sr.Close();
return json;
}
/// <summary>
/// 把内容写入到文件中
/// </summary>
/// <param name="path"></param>
/// <param name="json"></param>
public static void WriteFile(string path, string json)
{
if (!File.Exists(path))
{
FileStream fs = File.Create(path);
fs.Close();
}
StreamWriter sw = new StreamWriter(path, false, System.Text.Encoding.UTF8);
try
{
sw.Write(json);
}
catch (System.Exception e)
{
Debug.Log(e.ToString());
}
sw.Close();
}
}

数据初始化问题
Unity3D学习笔记(二十五):Json的更多相关文章
- python3.4学习笔记(二十五) Python 调用mysql redis实例代码
python3.4学习笔记(二十五) Python 调用mysql redis实例代码 #coding: utf-8 __author__ = 'zdz8207' #python2.7 import ...
- Java基础学习笔记二十五 MySQL
MySQL 在dos中操作mysql 连接mysql命令: mysql -uroot -p密码 ,连接OK,会出现mysql> 对数据库的操作 创建一个库 create database 库名 ...
- Java学习笔记二十五:Java面向对象的三大特性之多态
Java面向对象的三大特性之多态 一:什么是多态: 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作. 多态性是对象多种表现形式的体现. 现实中,比 ...
- angular学习笔记(二十五)-$http(3)-转换请求和响应格式
本篇主要讲解$http(config)的config中的tranformRequest项和transformResponse项 1. transformRequest: $http({ transfo ...
- PHP学习笔记二十五【类的继承】
<?php //定义父类 class Stu{ public $name; protected $age; protected $grade; private $address;//私有变量不会 ...
- Unity3D学习笔记(十五):寻路系统
动画生硬切换:animation.play();//极少使用,常用融合方法 动画融合淡入:animation.CrossFade(“Idle”, 0.2f);//0.2f为与前一动画的融合百分比为20 ...
- python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法
python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法window安装redis,下载Redis的压缩包https://git ...
- python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码
python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码 python的json.dumps方法默认会输出成这种格式"\u535a\u ...
- 学习笔记:CentOS7学习之二十五:shell中色彩处理和awk使用技巧
目录 学习笔记:CentOS7学习之二十五:shell中色彩处理和awk使用技巧 25.1 Shell中的色彩处理 25.2 awk基本应用 25.2.1 概念 25.2.2实例演示 25.3 awk ...
- Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例
目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装项目其它需要包 清除冗余文件并重新规划项目目录 配置文件 规划示例路由,并新建相关文件 实现数据访问和业务逻辑相关方法 编写mys ...
随机推荐
- linux 安装 Python
一. 打开终端,输入:wget https://www.python.org/ftp/python/3.5.0/Python-3.5.0b4.tgz 下载完毕后 输入解压命令:tar –zxvf Py ...
- C# foreach 中获取索引index的方法[转]
在C# 开发中往往使用foreach 循环语句 来代替for循环语句.foreach 比 for 更加简洁高效. foreach : foreach ...
- Firefox 功能笔记
1.复制标签 说明:复制标签功能即新开一个与当前页一样的标签页,这个功能在Chrome中点击标签右键复制即可,但是在firefox中没有 Firefox中实现:Ctrl+拖动标签页
- Flask的请求对象--request
request-Flask的请求对象 请求解析和响应封装大部分是有Werkzeug完成的,Flask子类化Werkzeug的请求(Request)对象和响应(Response)对象,并添加了和程序的特 ...
- Linux服务器---邮件服务spam
安装spam spam(SpamAssassin)利用perl来进行文字分析,他会检测邮件的标题.内容.送信人,这样就可以过滤出垃圾邮件 1.安装spam.由于spam的依赖太多,用户一定要使用yum ...
- Linux基础命令---tail显示文本
tail 显示文本文件尾部的部分内容,默认显示最后10行. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora. 1.语法 ...
- centos6.8卸载DB2 10.5
1.卸载实例 Ø 使用Root用户登陆 cd /opt/ibm/db2/V9.5/instance/ ./db2idrop db2inst1 ./dasdrop db2inst1 2.卸载db2 Ø ...
- JustOj 1994: P1001
题目描述 给定一个长度为N(0< n< =10000)的序列,保证每一个序列中的数字a[i]是小于maxlongint的非负整数 ,编程要求求出整个序列中第k大的数字减去 ...
- 浏览收藏夹 看到了hadoop3.0 的改动
大数据非常前卫的it网站 https://www.iteblog.com/archives/tag/hadoop/ 1.多个服务的默认端口被改变 在此之前,多个Hadoop服务的默认端口都属于Li ...
- 【js操作url参数】获取指定url参数值、取指定url参数并转为json对象
获取指定url参数值 /* 获取某url中的某参数值 调用:GetUrlQueryString("[url地址]","[参数名]"); */ function ...