Unity(游戏)中五种数据存储的方法

Unity(游戏)中五种数据存储的方法

一、PlayerPrefs

unity3d提供了一个用于本地持久化保存与读取的类-------PlayerPrefs.工作原理很简单,以键值对的形式将数据保存在文件中,然后程序可以根据这个名称取出上次保存的数值(注:PlayerPrefs运用起来很方便,随时都可以存取与读取)。
Playerprefs类支持3中数据类型的保存和读取,分别是浮点型、整型和字符串型:
PlayerPrefs.SetInt();保存整型数据
PlayerPrefs.SetFloat();保存浮点型数据
PlayerPrefs.SetString();保存字符串型数据
PlayerPrefs.GetInt();读取整型数据
PlayerPrefs.GetFloat();读取浮点型数据
PlayerPrefs.GetString();读取字符串型数据

二、读取普通文本资源:TextAsset

1
2
TextAsset text=(TextAsset)Resources.Load("unity3d");
Debug.Log(text.text);

在Project窗口的根目录创建Resources文件夹,然后把名字为unity3d.txt的文件夹的文件放在Resources文件夹下就可以读取到。

三、Json

1.JSON 语法规则

(1)对象表示为键值对

1
2
3
Dictionary<key,value> dic = new Dictionary<key,value>();
dic[0] = "Jack";
string temp = dic[0];

 

形式:{"firstName": "Json"}
{"firstName": "Jack"}
键值对之间以冒号连接

(2)数据由逗号分隔

{“firstName”: “Jack”,“middleName”:“Nigulas”}

(3)花括号保存对象

(4)方括号保存数组

“People”:[{“name”:“小红”,“age”:“16”,“grade”:“2”},{“name”:“小明”,“age”:“18”,“grade”:“2”}]

(5)Json在线校验网站

http://www.bejson.com/

2.需要使用第三方插件,下载网址在https://sourceforge.net/projects/litjson/,下载之后将LitJson文件拖到自己工程的文件夹中,放在Plugins下。
两种解析方式及常见一个及多个对象的Json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using LitJson;
 
public class JsonTest : MonoBehaviour
{
 
private string jsonStr = "{'name':'孙悟空','age':50,'gender':'公','skill':'火眼金睛'}";
 
// Use this for initialization
void Start ()
{
//ParJson();
//ParJson2();
//CreateJson();
CreateJson02();
}
/// <summary>
/// 第一种解析方式
/// </summary>
private void ParJson()
{
string jsonStr = "[{'name':'孙悟空','age':50,'gender':'公','skill':'火眼金睛'}," +
"{'name':'猪八戒','age':500,'gender':'公','skill':'九齿钉耙'}," +
"{'name':'唐僧','age':23,'gender':'男','skill':'紧箍咒'}," +
"{'name':'沙和尚','age':500,'gender':'公','skill':'禅杖'}]";
TravelWestPerson[] quJingRens = JsonMapper.ToObject<TravelWestPerson[]>(jsonStr);
 
if (quJingRens != null)
{
for (int i = 0;i<quJingRens.Length;i++)
{
Debug.Log(quJingRens[i].name+" "+quJingRens[i].age+" "+quJingRens[i].gender+" "+quJingRens[i].skill);
}
}
 
}
/// <summary>
/// 第二种解析方式
/// </summary>
private void ParJson2()
{
string jsonStr = "[{'name':'孙悟空','age':50,'gender':'公','skill':'火眼金睛'}," +
"{'name':'猪八戒','age':500,'gender':'公','skill':'九齿钉耙'}," +
"{'name':'唐僧','age':23,'gender':'男','skill':'紧箍咒'}," +
"{'name':'沙和尚','age':500,'gender':'公','skill':'禅杖'}]";
 
JsonData datas = JsonMapper.ToObject(jsonStr);
 
for (int i=0;i<datas.Count;i++)
{
JsonData data = datas[i];
//通过键值对的形式 获取 value值
Debug.Log(data["name"]+" "+data["age"]+" "+data["gender"]+" "+data["skill"]);
}
}
 
/// <summary>
/// 创建一个对象的Json
/// </summary>
private void CreateJson()
{
//new 对象
TravelWestPerson baiLongMa = new TravelWestPerson("小白龙",500,"男","呼风唤雨");
//对象转字符串
string jsonStr = JsonMapper.ToJson(baiLongMa);
 
Debug.Log(jsonStr);
 
}
/// <summary>
/// 创建多个对象的Json
/// </summary>
private void CreateJson02()
{
string[] names = new string[] {"小白龙","大白兔","老龙王"};
 
int[] ages = new int [] {500,3,5000};
 
string[] genders= new string[] {"男","女","男"};
 
string[] skills = new string[] {"鹰愁涧","吃萝卜","呼风唤雨"};
 
//集合的
JsonData data = new JsonData();
//设置为数组类型
data.SetJsonType(JsonType.Array);
 
for(int i=0;i<names.Length;i++)
{
//集合中的一个对象
JsonData personData = new JsonData();
//对这个对象进行赋值
personData["name"] = names[i];
personData["age"] = ages[i];
personData["gender"] = genders[i];
personData["skill"] = skills[i];
 
data.Add(personData);
}
 
string strJson = data.ToJson();
 
Debug.Log(strJson);
 
 
}
 
// Update is called once per frame
void Update ()
{
 
}
}
 
internal class TravelWestPerson
{
public string name;
public int age;
public string gender;
public string skill;
 
public TravelWestPerson(string name,int age,string gender,string skill)
{
this.name = name;
this.age = age;
this.gender = gender;
this.skill = skill;
}
 
public TravelWestPerson()
{
}
}

四、XML存储

1)XML 被设计用来传输和存储数据。

2)XML 标签没有被预定义。您需要自行定义标签。

3)XML 数据以纯文本格式进行存储,因此提供了一种独立于软件和硬件的数据存储方法。

4)元素:

属性:

Anna
Smith

标签:元素 + 属性

5)声明

<?xml version="1.0" encoding="utf-8"?>

6)xml的书写开闭必须统一,又开有闭
所有 XML 元素都须有关闭标签

7)XML 标签对大小写敏感

下面两个标签不一样
<Message>这是1</Message>
<message>这是2</message>
这是错误的
<Message>这是1</message>

8)XML 必须正确地嵌套

9)XML 的属性值须加引号

10)XML 命名规则

XML 元素必须遵循以下命名规则:

名称可以含字母、数字以及其他的字符
名称不能以数字或者标点符号开始
名称不能以字符 “xml”(或者 XML、Xml)开始
名称不能包含空格
可使用任何名称,没有保留的字词。

11)XML 属性必须加引号

属性值必须被引号包围,不过单引号和双引号均可使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?xml version="1.0" encoding="utf-8"?>
<root>   
<persons>
<person id = "1">
<name>唐伯虎</name>
<age>23</age>
<skill>撩妹</skill>
</person>
<person id = "2">
<name>祝枝山</name>
<age>26</age>
<skill>神鸟凤凰图</skill>
</person>
<person id = "3">
<name>文征明</name>
<age>25</age>
<skill>四绝的全才</skill>
</person>
<person id = "4">
<name>徐祯卿</name>
<age>25</age>
<skill>号称文雄</skill>
</person>
</persons>
</root>

 

五、Sqlite牵涉到的Sqlite语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//创建表
create table UESR(uid integer,name text,score text);
-----------------------------------------------------------------------------------------
//列出表名
.table                   (不加;分号的)
-----------------------------------------------------------------------------------------
//插入信息 增加信息
insert into USER(name,score) values('lisi','89');
//插入信息
insert into USER values(1,'zhangsan',89);
-------------------------------------------------------------------------------------
//以属性删除 删除一行的数据
delete from USER where score = 4;
---------------------------------------------------------------------------------------
//修改
update USER set score =75 where name='lisi';
 
---------------------------------------------------------------------------------------
//展示表中的所有信息
select*from USER;
 
 
//主键自增
create table if not exists USER(uid integer primary key autoincrement,name text,score text);
 
 
//返回有几行
select count(*) from USER;
//返回总和
select sum(score)from USER;
select*from USER where score >69 and score<95;
select *from USER limit 2;//前两条
select *from USER order by score;//正序排
select *from USER order by score desc;//倒序排
select *from USER order by score desc limit 1;//倒数第一个
 
 
//删除表格
drop table USER;
posted @   多见多闻  阅读(2144)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示