首页 理论教育Unity数据库与存储-虚拟现实理论基础与应用开发实践

Unity数据库与存储-虚拟现实理论基础与应用开发实践

【摘要】:本小节将介绍的是Unity数据库与存储的相关内容。XML的设计宗旨是传输数据,而非显示数据。7)Xml数据生成步骤在Unity引擎中如何生成本地XML数据?8)Xml数据生成示例9)Xml序列化序列化是将对象状态转换为可保持或传输的格式的过程。12)什么是SQLite①SQLite是一款轻型的数据库。语法:SELECT列名称FROM表名称13)Unity当中使用SQLite导入mono.data.sqlite.dll到Assets文件夹代码添加库:using Mono.Data.Sqlite;使用SQLiteConnection对象,进行数据库连接,此操作可以创建空的数据库。关闭数据库连接,释放资源。…

本小节将介绍的是Unity数据库与存储的相关内容。

1)PlayerPrefs存储数据

适用范围如下:

(1)适用设备:Mac OSX、Linux、Windows、Windows Store Apps、Windows Phone 8、Web players。

(2)存储机制:Key-Value。

(3)可存储变量类型:int、float、string。

2)PlayerPrefs数据存储路径

①Mac OSX:~/Library/Preferences

②Windows:HKCU\Software\[company name]\[product name]

③Linux:~/.config/unity3d/[CompanyName]/[ProductName]

④Windows StoreApps:%userprofile%\AppData\Local\Packages\[ProductPackageId]>\LocalState\playerprefs.dat

⑤WebPlayer

⑥Mac OS X:~/Library/Preferences/Unity/WebPlayerPrefs

⑦Windows:%APPDATA%\Unity\WebPlayerPrefs

3)PlayerPrefs常用方法

4)XML数据生成和解析

(1)XML指可扩展标记语言(EXtensible Markup Language)。

(2)XML是一种标记语言,很类似HTML。

(3)XML的设计宗旨是传输数据,而非显示数据。

5)XML结构

每个标签内部可以有多个属性。标签可以层层嵌套,形成一个树形结构。

例如:

以上Alarm(元素节点)、lock(属性节点)、Time(元素节点)、StringValue(文本节点)都是节点(Node),但是只有<Alarm>...</Alarm>和<Time>StringValue</Time>是元素(Element)。

6)XML常用的类

(1)XmlDocument——XML文件类。

(2)XmlNode——XML节点类。

(3)XmlAttribute——XML属性类。

(4)XmlElement——XML元素类XmlNode XmlDocument XmlElement。

7)Xml数据生成步骤

在Unity引擎中如何生成本地XML数据?

第一步:引用C#的命名空间System.Xml。

第二步:生成XML文档(XmlDocument类)。

第三步:生成根元素(XmlElement类),添加给文档对象。

第四步:循环生成子元素添加给父元素。

第五步:将生成的XML文档保存。

8)Xml数据生成示例

9)Xml序列化

序列化是将对象状态转换为可保持或传输的格式的过程。我们可以把对象序列化为不同的格式,比如,Json序列化、XML序列化、二进制序列化等,以上这些不同的格式也都是为了适应具体的业务需求。

10)反序列化示例

11)JSON数据生成和解析

(1)System.Json:

①JSON是纯文本;②JSON是一种轻量级的数据交换格式;③JSON具有层级结构(值中存在值):

数据在键值对;数据由逗号分隔;花括号保存对象;方括号保存数组

(2)LitJson.JsonMapper:

①把对象转化成JSON格式字符串:JsonMapper.ToJson;②把JSON格式字符串转化成对象:JsonMapper.ToObject。(www.chuimin.cn)

12)什么是SQLite

①SQLite是一款轻型的数据库。

②SQLite的设计目标是嵌入式的。

③SQLite占用资源非常低。

④SQLite能够支持Windows/Linux/Unix等主流的操作系统。

作用:INSERT INTO语句用于向表格中插入新的行。

语法1:INSERT INTO表名称VALUES(值1,值2,…)

语法2:INSERT INTO table name(列1,列2,…)VALUES(值1,值2,…)

作用:DELETE语句用于删除表中的行。

语法:DELETE FROMPerson WHERE LastName=Wilson

作用:Update语句用于修改表中的数据。

语法:UPDATE表名称SET列名称=新值WHERE列名称=某值

作用:SELECT语句用于从表中选取数据。

语法:SELECT列名称FROM表名称

13)Unity当中使用SQLite

导入mono.data.sqlite.dll到Assets文件夹代码添加库:using Mono.Data.Sqlite;

使用SQLiteConnection对象,进行数据库连接,此操作可以创建空的数据库。

具体代码如下:

14)执行SQL语句的三种方式

(1)int ExecuteNonQuery()。返回受影响的行数(常用于执行增删改操作)。

(2)object ExecuteScalar()。返回查询到的第一个值(常用于只查询一个结果时)。

(3)SqliteDataReader ExecuteReader()。返回所有查询的结果(SqliteDataReader对象)。

15)数据库封装:为何要封装?

(1)方便项目管理。

(2)方便开发人员的快捷的使用。

(3)防止高度保密数据外泄。

(4)连接数据库。

(5)通过Sql语句查询数据。

(6)通过表名查询全表数据。

(7)关闭数据库连接,释放资源。

16)平台选择不同的存储路径

在直接使用Application.dataPath来读取文件进行操作,移动端是没有访问权限的。

Application.streamingAssetsPath

直接使用Application.streamingAssetsPath来读取文件进行操作,此方法在PC/Mac电脑中可实现对文件实施“增删查改”等操作,但在移动端只支持读取操作。

使用Application.persistentDataPath来操作文件,该文件存在手机沙盒中,因为不能直接存放文件。

(1)通过服务器直接下载保存到该位置,也可以通过Md5码比对下载更新新的资源。

(2)没有服务器的,只有间接通过文件流的方式从本地读取并写入。

Application.persistentDataPath文件下,然后再通过Application.persistentDataPath来读取操作。

注:

在PC/Mac电脑以及Android跟iPad、iPhone都可对文件进行任意操作,另外在IOS上该目录下的东西可以被iCloud自动备份。发布到安卓端需要经过特殊处理。同样需要上述的三个类库和libsqlite.so文件,但不需要重新建表和重新。插入数据内容。当Android端安装应用程序时,需要一个*.apk的安装文件,此文件内保存着我们从Unity开发平台导入的*.sqlite文件,所以我们可以通过www来下载该sqlite文件,从而通过IO流写入到Android本地的persistentDataPath沙盒路径。该文件保存着所有表格和数据,无需再次创建和插入,通常使用的都是这种方式,较为便捷。

17)Android端连接本地数据库

注意:

二进制文件需要放在Plugins→Android→assets中,然后根据下面的路径就可以在Android中读取。