数据结构通俗来讲就是用某个对象去存储数据集合,比如要存储100个整数,要用什么样的数据类型能把它们存储好。

Jason处理,服务器对接,配置文件的使用,Unity和Jason之间相互的转换。

Array

数组

1: 类型[] 名字 = new 类型[数量]{“初始化的值”, “”, ''”}; 如果有初始值也可以省略大小;
2: 优点:

  (1)内存连续,速度快;

3: 缺点:

  (1)大小固定,容易访问越界;

Array实例

1.创建Unity项目和文件目录,保存场景

2.创建一个空节点GameObject,创建一个脚本jason_test挂载在GameObject下面

 打开jason_test

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4.  
  5. public class jason_test : MonoBehaviour {
  6.  
  7. // Use this for initialization
  8. void Start () {
  9. // 数组
  10. // string, 数组
  11. string[] str_array = new string[] { "yes", "blake", "hello" };//可以写string[3],也可以不写
  12. int[] int_array = new int[];
  13.  
  14. // 索引来访问0
  15. int_array[] = ;
  16. int_array[] = ;
  17. // end
  18.  
  19. Debug.Log("Length = " + int_array.Length);
  20. // 优点:连续的内存, 访问速度快,通过数组名称加索引就能访问,存储,使用。
  21. // 缺点:大小是固定,已经创建就不能加大/缩小;
  22. }
  23.  
  24. // Update is called once per frame
  25. void Update () {
  26.  
  27. }
  28. }

3.运行结果

ArrayList

1: 属于 System.Collections 命令空间
2: ArrayList l = new ArrayList();
3: 操作:添加 Add(数据), 修改[index] = 内容, 删除 RemoveAt(index);
4: 优点:
  (1)不用固定大小;
  (2)可以存放任意类型;
5: 缺点
  (1)由于存放不同类型的数据,导致很多看不见的性能消耗, 多次转换等;

ArrayList实例

1.创建Unity项目和文件目录,保存场景

2.创建一个空节点GameObject,创建一个脚本jason_test挂载在GameObject下面

 打开jason_test

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4.  
  5. public class jason_test : MonoBehaviour {
  6.  
  7. // Use this for initialization
  8. void Start () {
  9. // ArrayList
  10. // 大小是灵活的,不是一开始写死的
  11. // 所有的操作都是Object,Object是C#的基类,所有的数据类型都是基于Object类
  12. ArrayList array_list = new ArrayList();
  13.  
  14. // 同一个list里面我可以是不同类型的数据;
  15. array_list.Add("string");
  16. array_list.Add(true);
  17. array_list.Add(false);
  18. array_list.Add();
  19. array_list.Add(10.5f);
  20.  
  21. // array_list是把所有的对象都当作Object来处理,所以拿到的对象要强制转换为具体的类型
  22. // [索引]访问, 0开始
  23. string a = (string)array_list[];
  24. Debug.Log(a);
  25. array_list.RemoveAt(); // 删除第0个元素,删除之后原来的第1个元素就变成第0个
  26. array_list[] = false;
  27. bool e = (bool)array_list[];
  28. Debug.Log(e);
  29. }
  30.  
  31. // Update is called once per frame
  32. void Update () {
  33.  
  34. }
  35. }

3.运行结果

List<T>

是介于Array和ArrayList之间的一种类型,比Array灵活,但是又没有ArrayList那么灵活

1: 属于 using System.Collections.Generic; 命令空间
2: List<T> l = new List<T>();
3: 操作:
  添加 Add(数据), 修改[index] = 内容, 删除 RemoveAt(index);
4: 优点:
  (1)不用固定大小;
  (2)存储的类型是泛型模板,比较灵活, 每个对象实例只能存储一个类型,没有那么多的强制转换操作,性能提高一点。

List<T>实例

1.创建Unity项目和文件目录,保存场景

2.创建一个空节点GameObject,创建一个脚本jason_test挂载在GameObject下面

 打开jason_test

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4.  
  5. public class jason_test : MonoBehaviour {
  6.  
  7. // Use this for initialization
  8. void Start () {
  9. // List<T>,一般都用这个
  10. // List<T> 指定模板,那么List就是存放这种数据类型
  11. List<float> float_list = new List<float>();
  12. float_list.Add(5.3f);
  13. float_list.Add(5.4f);
  14.  
  15. // 访问,读写
  16. Debug.Log(float_list[]);
  17. float_list[] = ;
  18. Debug.Log(float_list[]);
  19.  
  20. //打印List大小
  21. Debug.Log(float_list.Count);
  22. float_list.RemoveAt();
  23. Debug.Log(float_list.Count);
  24. }
  25.  
  26. // Update is called once per frame
  27. void Update () {
  28.  
  29. }
  30. }

3.运行结果

Dictionary<K, T>

1: 属于 using System.Collections.Generic; 命令空间
2: Dictionary<KT, VT> l = new Dictionary<KT, VT>(); key --> value,key --> value。key可以是字符串,整数,也可以是其他的泛型的类型。
3: 操作:
  添加 Add(数据), 修改[key] = 内容, 删除 RemoveAt(index);
4: 优点:
  (1)不用固定大小;
  (2)存储的类型是泛型模板,比较灵活, 每个dict只能存储一个类型;
  (3) key也是泛型 string, int ....

Dictionary<K, T>实例

1.创建Unity项目和文件目录,保存场景

2.创建一个空节点GameObject,创建一个脚本jason_test挂载在GameObject下面

 打开jason_test

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4.  
  5. public class jason_test : MonoBehaviour {
  6.  
  7. // Use this for initialization
  8. void Start () {
  9. // 字典 key, value key(模板string, int..), value(模板...)
  10. // 比如用string类型的key来存放float类型的value;
  11. // key和value的类型确定了就不能更改
  12. Dictionary<string, float> dict = new Dictionary<string,float>();
  13. dict.Add("speed", 100.0f);
  14. dict.Add("Attack", 20.0f);
  15.  
  16. Debug.Log(dict.Count); //
  17.  
  18. Debug.Log(dict["speed"]); // 100.0f
  19. dict["speed"] = 3.0f;
  20. Debug.Log(dict["speed"]); // 3.0f
  21.  
  22. dict.Remove("Attack");
  23. Debug.Log(dict.Count); //
  24.  
  25. }
  26.  
  27. // Update is called once per frame
  28. void Update () {
  29.  
  30. }
  31. }

3.运行结果

Json数据格式

数据对象都是在内存里面的,怎样把内存中的数据对象存到磁盘中去呢?这就需要把内存中的数据转换成一种数据格式,再存到磁盘中去。

Jason就是把JavaScript的Object对象转换成一个文本存到磁盘中去。如把字符串存到磁盘里面,然后从磁盘中再读字符串出来,再把它反解为JavaScript的Object的内存对象。

1: JSON (JavaScript Object Notation)
 随着JavaScript的流行与互联网应用,JavaScript里面最强大的数据类型Object,使用起来极其的方便,能存key--value存的非常好,整数,小数,还能在Object里面嵌套Object。

 为了能更好的做数据交换,设计了JSON协议,能够将JavaScript里面的Object,变成可以阅读的文本数据及JSON数据格式。实现JavaScript里面的Object与JSON的转换,Object对象转换成JSON数据以后,方便传输与存储,JSON变为Object方便对象重建;

2: python语言, Lua语言等其它的脚本语言都有类是于JavaScript的Object数据结构,所以JSON数据能在其它的语言里面也非常方便的使用;

3: JSON采用完全独立于语言的文本格式的字符串(string),易于阅读与编写以及解析与生成,在很多时候数据交换都采用JSON, 数据--->JSON-->传输,存储--->解码JSON-->数据

4: 上面的过程又叫序列化与反序列化;

 序列化:内存数据---->打包---->介质

 反序列化:介质---->解析---->内存数据

Json数据格式

1: JSON Object {}; 里面为key: value;
2: value为数字, 11.0, 12, 0,
 value为bool true, false
 value为数组 [ 值, bool, 数组, Object]
 value 为Object { key: value}
3: Unity 5.3.x以后自带的Json数据解析器
5: Unity 5.3以前可以使用第三方的C#库LitJSon,老技术,没什么好讲的,在(第66)有压缩包LitJson.zip。

Unity5.3 Jason序列化

1: 序列化与反序列化: 内存数据-->文件存储介质; 文件存储介质--->内存数据
2: Unity序列化:
(1) 把要序列化的对象声明称:
  [System.Serializable], using System; [Serializable]
(2) JsonUtility.toJson(object); // 将对象转成json字符串;
(3) 将Json字符串的数据解析到对象 JsonUtility.FromJsonOverwrite(json_str, obj);
(4) 当Unity序列化你的脚本的时候,它将仅仅序列化公有域。如果作为附加你也想要Unity去序列化你的一个私有域,你可以添加SerializeField(序列化域)属性给这个域。
(5) JSON数组:
(6) JSON对象:

3.很多游戏的数据,可以配到Jason文件里面,然后从文件里面读出来,很多时候互联网向服务器发送数据,我们也可以来发送Jason文本,然后再解析出数据类型

Jason序列化和反序列化实例

1.创建Unity项目和文件目录,保存场景

2.创建一个空节点GameObject,创建一个脚本jason_test挂载在GameObject下面

 打开jason_test

  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5.  
  6. // 声明一个可序列化的对象
  7. // 对这个声明可序列化的对象里面的public成员,做序列化
  8. // [System.Serializable]
  9. [Serializable]
  10. class sub
  11. {
  12. public string sub_name = "sub_name";
  13. }
  14.  
  15. [Serializable]
  16. class my_object
  17. {
  18. public int a = ;
  19. public int b = ;
  20. public string age = "blake";
  21.  
  22. // 不是public,又想序列化?
  23. [SerializeField] // 可序列化的字段
  24. bool is_male = true;
  25.  
  26. public int[] int_array;//object里面定义数组
  27.  
  28. public sub s;//object里面定义object
  29. }
  30.  
  31. public class jason_test : MonoBehaviour {
  32.  
  33. // Use this for initialization
  34. void Start () {
  35. // JSON
  36. //json序列化
  37. // (1) 使用[Serializable]标记要序列化的对象,是可序列化的
  38. my_object obj = new my_object();
  39. obj.int_array = new int[] { , , };//初始化
  40. obj.s = new sub();//初始化
  41.  
  42. // (2) 内存数据对象,序列化成json字符串
  43. string json_string = JsonUtility.ToJson(obj);//序列化成字符串
  44. Debug.Log(json_string); // 有了这个json_string字符串,就可以存储,传输
  45.  
  46. // json反序列化
  47. my_object obj2 = new my_object();//obj2里面是混乱的初始值
  48. JsonUtility.FromJsonOverwrite(json_string, obj2);//把json_string字符串解析到obj2中
  49. Debug.Log(obj2.int_array[]); // 输出2,说明反序列化成功,已经可以使用解析出来的数据了
  50. }
  51.  
  52. // Update is called once per frame
  53. void Update () {
  54.  
  55. }
  56. }

3.运行结果

关于Unity中常用的数据结构和JSON处理(专题三)的更多相关文章

  1. Unity中常用的数据结构总结

    本篇博文对U3D经常用到的数据结构和各种数据结构的应用场景总结下. 1.几种常见的数据结构 这里主要总结下在工作中常碰到的几种数据结构:Array,ArrayList,List<T>,Li ...

  2. Unity3D中常用的数据结构总结与分析

    来到周末,小匹夫终于有精力和时间来更新下博客了.前段时间小匹夫读过一份代码,对其中各种数据结构灵活的使用赞不绝口,同时也大大激发了小匹夫对各种数据结构进行梳理和总结的欲望.正好最近也拜读了若干大神的文 ...

  3. Unity3D中常用的数据结构总结与分

    阅读目录 1.几种常见的数据结构 2.几种常见数据结构的使用情景 来到周末,小匹夫终于有精力和时间来更新下博客了.前段时间小匹夫读过一份代码,对其中各种数据结构灵活的使用赞不绝口,同时也大大激发了小匹 ...

  4. java中常用的数据结构--Collection接口及其子类

    java中有几种常用的数据结构,主要分为Collection和map两个主要接口(接口只提供方法,并不提供实现),而程序中最终使用的数据结构是继承自这些接口的数据结构类. 一.集合和数组的区别 二.C ...

  5. Linux内核中常用的数据结构和算法(转)

    知乎链接:https://zhuanlan.zhihu.com/p/58087261 Linux内核代码中广泛使用了数据结构和算法,其中最常用的两个是链表和红黑树. 链表 Linux内核代码大量使用了 ...

  6. Java中常用的数据结构类

    结构体系图 List ArrayList.LinkedList.Vector有什么区别? ArrayList 只能装入引用对象(基本类型要转换为封装类): 线程不安全: 底层由数组实现(顺序表),因为 ...

  7. (转)Unity3D中常用的数据结构总结与分析

    http://www.cnblogs.com/murongxiaopifu/p/4161648.html#array   1.几种常见的数据结构 常碰到的几种数据结构:Array,ArrayList, ...

  8. 开发中常用的两个JSON方法

    参考文章:https://juejin.cn/post/6844903711127404557 在前端开发过程中,有两个非常有用的方法来处理 JSON 格式的内容: JSON.parse(string ...

  9. java中常用的数据结构--Map

    一.定义: 将键映射到值的对象. 地图不能包含重复的键; 每个键可以映射到最多一个值. public interface Map<K,V> 请注意!!!, Map 没有继承 Collect ...

随机推荐

  1. JDK 1.6 写Webservice时,runtime modeler error: Wrapper class com.ws.jaxws.DoSomething is not found问题的解决办法

    转自:http://blog.csdn.net/forandever/article/details/5276038 1.问题如下: Exception in thread "main&qu ...

  2. javascript基础拾遗(六)

    1.Date内置对象 获取系统时间 var now = new Date() console.log(now) console.log(now.getDate()) console.log(now.g ...

  3. DIOCP-开源项目ECHO测试.

    DIOCP自开源以来,得到了很多朋友的测试,并进行了诸多的改进,现在已经运用到了一些具体的项目当中. DIOCP底层运行稳定. 昨天做了个ECHO测试,这个连接数并没有达到上限. 11K 连接,1个半 ...

  4. spring boot spring cache ehcache3.x整合

    http://blog.csdn.net/qq18998401056/article/details/53467671 **************************************** ...

  5. java 多线程 28 : 多线程组件之 Semaphore 信号量

    Semaphore是非常有用的一个组件,它相当于是一个并发控制器,是用于管理信号量的.构造的时候传入可供管理的信号量的数值,这个数值就是控制并发数量的,就是同时能几个线程访问.我们需要控制并发的代码, ...

  6. Jenkins自动化构建python nose测试

    [本文出自天外归云的博客园] 简介 通过Jenkins自动化构建python nose测试分两步: 1. 创建节点(节点就是执行自动化测试的机器): 2. 创建任务并绑定节点(用指定的机器来跑我们创建 ...

  7. Docker Dockerfile 基本结构详解

    dockerfike快速创建自定义的Docker镜像 一.目录 1.docker典型结构 2.指令介绍 3.创建docker镜像 二.结构 DockerFile分为四部分组成:基础镜像信.维护者信息. ...

  8. 从 shell 眼中看世界

    (字符) 展开每一次你输入一个命令,然后按下 enter 键,在 bash 执行你的命令之前, bash 会对输入的字符完成几个步骤处理.我们已经知道两三个案例,怎样一个简单的字符序列,例如 “*”, ...

  9. C#学习笔记(1)——快捷键

    说明(2017-5-23 09:29:17): 1. 自动排版Ctrl+E,D 2. 注释Ctrl+E,C 3. 取消注释Ctrl+E,U 4. 给字段生成属性Ctrl+R,E 5. 新建类Alt+S ...

  10. css3实现的4种动画特效按钮

    今天要给大家介绍的是css3按钮,里面包含四种特效的动画,如下图: 在线预览    下载源码 实现html代码: <div align="center" class=&quo ...