11 数据存储(Unity3D)
所有的游戏开发都离不开数据存储的操作,Unity3D也不例外
PlayerPrefs:
PlayerPrefs是Unity系统自带的的一种最简单的存储方式,数据是使用字典的方法来存储的
PlayerPrefs的常用方法:
SetFloat:存储float类型的数据
GetFloat:通过key值获取float类型的数据
SetInt:存储int类型的数据
GetInt:通过key值获取int类型的数据
SetString:存储string类型的数据
GetString:通过key值获取string类型的数据
DeleteAll:删除所有的PlayerPrefs数据
HasKey:判断是否存在该key值的数据
XML数据生成和解析
都需要先创建 XmlDocument对象来调用
xml 指可扩展标记语言(EXtensible Markup Language)
xml 是一种标记语言,类似于HTML
xml 的设计宗旨是传输数据,而非显示数据
xml存储数据是以树形结构来存储数据的,存储的数据有一个个的节点构成,每一个完整的标签算是一个元素
<Alarm lock=“true"> <Time>
StringValue
</Time> </Alarm>
以上Alarm(元素节点),lock(属性节点),Time(元素节点), StringValue( 本节点)都是节点(Node),
但是只有 <Alarm>......</Alarm> 和<Time>StringValue</Time>是元素(Element)
xml文件可以在外部创建(使用SubLimeText)拖入Unity工程中,也可以使用脚本创建
在脚本中创建xml文档时会使用到几个常用的xml文件类
XmlDocument---xml文件类
XmlNode---xml节点类
XmlAttribute--xml属性类
XmlElement---xml元素类
注:在脚本中使用xml文件类时.需要引入命名空间System.Xml;
XmlNode的常见属性和方法
InnerText 获取或设置节点及其所有子节点的值(仅元素节点拥有)
Value: 获取或设置节点的值(仅属性节点拥有)
AppendChild 将指定的节点或元素添加到该节点子节点列表的末尾
XmlElement的常见方法及属性
SetAttribute 设置具有指定名称的特性的值
HasAttribute 判断该元素节点是否具有属性
XmlDocument的常见方法及属性
CreateXmlDeclaration:创建一个具有指定值的 XmlDeclaration 节点。
CreateAttribute:创建一个属性
CreateNode : 创建具有指定的节点类型、Name 和 NamespaceURI 的 XmlNode。
AppendChild 将指定的节点或元素添加到该节点子节点列表的末尾
Save:将xml文档保存到指定的文件
edge:
//1.创建头部信息
XmlDeclaration declaration = doc.CreateXmlDeclaration ("1.0", "UTF-8", null);
//2.将头部信息添加到xml文档
doc.AppendChild (declaration);
//3.创建一个根节点
XmlNode root = doc.CreateNode (XmlNodeType.Element, "Compontent", null);
//4.给根节点添加一个name属性
XmlAttribute attribute = doc.CreateAttribute ("name");
attribute.Value = "传销无限好";
//将属性设置给根节点
root.Attributes.SetNamedItem (attribute);
//将root根节点添加到XML文档中
doc.AppendChild (root);
//5.给根节点添加一个子元素
XmlElement z_gameobject = doc.CreateElement ("gameobject");
z_gameobject.SetAttribute ("tag", "Player");
z_gameobject.SetAttribute ("layer", "Default");
z_gameobject.InnerText = "This is a gameibject";
//将子元素添加到根节点中
root.AppendChild (z_gameobject);
注:在存储方法的最后一定要写下面代码,来存储所编辑的xml文档.
//将xml文档存储在本地的asset文件夹下
doc.Save (Application.dataPath + "/SHN_Component.xml");
xml文件的解析
//获取Asset下的xml文件
doc.Load (Application.dataPath + "/first.xml");
- //获取xml的根节点
- XmlElement root = doc.DocumentElement;
- //获取根节点下的某一节点
- XmlNode node_pos_x = root.SelectSingleNode ("/Component/gameobject/transform/position/x");
- Debug.Log (node_pos_x.InnerText);
- //获取root中属性的集合
- XmlAttributeCollection attributes = root.Attributes;
- foreach (XmlAttribute item in attributes) {
- Debug.Log ("name : " + item.Name + " Value:" + item.Value);
- }
- //知道标签的名字,来获取对应的标签的值
- string xValue = root.GetElementsByTagName ("x") [].InnerText;
- Debug.Log ("scale下的x值为:" + xValue);
- //获取一个标签下所有的子节点
- XmlNodeList nodeList = root.SelectNodes ("/Component");
- //遍历每一个节点
- foreach (XmlNode item in nodeList) {
- Debug.Log (item.Name);
- }
- XmlNode node = root.SelectSingleNode ("/Component/gameobject/transform/position");
- foreach (XmlNode item in node.ChildNodes) {
- Debug.Log (item.InnerText);
- }
C#中XmlNode与XmlElement的区别如下:
XmlNode类表示xml文档中的单个节点,其命名空间为:System.Xml。XmlNode的三个最主要的子类包括:XmlDocument、XmlDataDocument及XmlDocumentFragment。
XmlElement继承自XmlLinkedNode又继承自XmlNode类,由此可知XmlElement是XmlNode的子类。
XmlElement是特殊的XmlNode类,Xml节点有多种类型:属性节点、注释节点、文本节点、元素节点等。也就是说XmlNode是这多种节点的统称。但是XmlElement专门指的就是元素节点。
XmlElement是具现类,可以直接实例化,而XmlNode是抽象类。
XmlElement拥有众多对Attribute的操作方法,可以方便的对其属性进行读写操作。
在编写xml文档的注意事项
1、元素的名字可以包含字母、数字、和其他字符
2、元素的名字不能以xml(XML、Xml、xML等)开头
3、元素的名字不能以数字或者标点符号开头
4、元素的名字不能包含空格
5、XML文档除了XML以外,没有其他所谓的保留字,任何的名字都可以使用,但是应该尽量使元素名字具有可读性
6、尽量避免使用"-"和".",因为可能引起混乱。
7、在XML元素命名中不要使用”:”,因为XML命名空间需要用到这个特殊的字符。
Json数据生成与解析
JSON是纯文本
JSON是一种轻量级的数据交换格式
JSON具有层级结构(可以 值 套 值)
JSON数据的存储可以看做是字典
在 JS 语言中,一切都是对象。因此,任何支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。但是对象和数组是比较特殊且常用的两种类型:
对象表示为键值对(即字典的Key--Value)
数据由逗号分隔
花括号保存对象
方括号保存数组
在JSON开发中,需要使用的类库(即命名空间)有两种:
System.Json(便于json文件的生成)
需要将System.Json.dll文件放入Asset文件夹下才可以导入命名空间
LitJson(便于JSON解析)
需要将LitJson.dll放入到Asset文件夹下
JSON开发中的常用类
JsonArray 是两个或更多个的JsonValue对象的有序序列
JsonObject 用来创建JSON对象,相当于一个大括号
JsonValue 可得到一个具体的value值
JSON 键值对是用来保存 JS 对象的一种方式,和 JS 对象的写法也大同小异,键/值对组合中的键名写在前面并用双引号 "" 包裹,使用冒号 : 分隔,然后紧接着值:
11 数据存储(Unity3D)的更多相关文章
- [iOS基础控件 - 6.11.5] 沙盒 & 数据存储
A.沙盒 每个APP都有一个沙盒,是独立存在的 1.Xcode5和Xcode6的模拟器文件目录 a.模拟器路径改版 (1)Xcode5中模拟器路径为:/Users/用户名/Library/Appl ...
- 【转】 [Unity3D]手机3D游戏开发:场景切换与数据存储(PlayerPrefs 类的介绍与使用)
http://blog.csdn.net/pleasecallmewhy/article/details/8543181 在Unity中的数据存储和iOS中字典的存储基本相同,是通过关键字实现数据存储 ...
- unity 初始化数据存储问题
在用unity进行开发的时初始化的数据和中间实时生成的数据存储不同,初始化文件数据建议安放在asset-StreamingAssets文件下,需要时读取取来.运行时所需的实时文件或数据持久化的xml文 ...
- iOS 应用数据存储方式(XML属性列表-plist)
iOS 应用数据存储方式(XML属性列表-plist) 一.ios应用常用的数据存储方式 1.plist(XML属性列表归档) 2.偏好设置 3.NSKeydeArchiver归档(存储自定义对象) ...
- Android 数据存储五种方式
1.概述 Android提供了5种方式来让用户保存持久化应用程序数据.根据自己的需求来做选择,比如数据是否是应用程序私有的,是否能被其他程序访问,需要多少数据存储空间等,分别是: ① 使用Shared ...
- Android数据存储五种方式总结
本文介绍Android平台进行数据存储的五大方式,分别如下: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 4 使用Cont ...
- android 数据存储Ⅱ
本章继续讲解在Android开发中,数据的存储与管理.涉及知识点:SQLite,SwipeRefreshLayout控件刷新. 1.功能需求 练习使用SQLite 做一个登录界面,数据库字段包含用户名 ...
- 【原创Android游戏】--猜数字游戏V1.1 --数据存储,Intent,SimpleAdapter的学习与应用
--------------------------------------------------------------- V0.1版本 上次做完第一个版本后,发现还有一些漏洞,并且还有一些可以添 ...
- 67.Android中的数据存储总结
转载:http://mp.weixin.qq.com/s?__biz=MzIzMjE1Njg4Mw==&mid=2650117688&idx=1&sn=d6c73f9f04d0 ...
随机推荐
- web应用基础架构
1.web中间件 中间件是一类连接软件组件和应用的计算机软件,它包括一组服务.以便运行在一台或多台服务器上的多个软件通过网络进行交互.该技术所提供的互操作性,推动了一致分布式体系架构的演进,该架构通常 ...
- 《Redis深度历险:核心原理和应用实践》千帆竞发——分布式锁
- Broadcast机制(二)
内容提纲: 在本节课当中,我会继续为大家讲解Android的广播机制,重点内容有以下的两个方面: a) 在应用程序当中注册BroadcastReceiver的方法 b) ...
- 引用类型--Function类型(函数声明与函数表达式、arguments.callee、caller、apply、call、bind)
在ECMAScript中函数实际上是对象.每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定 ...
- luogu P2763 试题库问题
本题可以用最大流也可以用最大匹配(本质一样),用dinic最大流好建图,但码量大,匈牙利码量小,建图费点劲. 最大流:依旧是设一个源点一个汇点,对于每一个种类,连一条到汇点的边,capacity为需要 ...
- Day1-XDoj-1062
题目描述 一天,lw梦见自己在打dota,然而对面是一个加强过的卡尔!于是,他每次都被n个技能瞬间秒杀.愤怒的lw决定买BKB,来加强生存力. 由于加强过的卡尔是电脑操作的,他每次看见lw时,只会以1 ...
- poj1861 network(并查集+kruskal最小生成树
题目地址:http://poj.org/problem?id=1861 题意:输入点数n和边数n,m组边(点a,点b,a到b的权值).要求单条边权值的最大值最小,其他无所谓(所以多解:(.输出单条边最 ...
- win7 & win10 安装AD管理工具
总所周知,AD域的作用对于一个公司有着无比重要的作用,但是在Win7/10系统下该如何去管理AD域呢. 对于AD域的服务器搭建,在这里我们不进行说明,感兴趣的同学可以去Google相关的资料,现在主要 ...
- {$DEFINE WANYI}
var Form5: TForm5; {$DEFINE WANYI}implementation{$R *.dfm}procedure TForm5.Button1Click(Sender: TObj ...
- Timer(阿里CTF)
下载文件之后发现是.apk类型文件,于是百度搜索了一下推荐再电脑上安装安卓模拟器,都尝试了一下逍遥安卓是真的不好用,小白觉得还是BlueStacks好用一些,下载之后去安装打开就看到了, 什么都没有发 ...