ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-02-07 15:35:44  阅读:211  来源: 互联网

标签:XML 存储 string gender age Unity 五种 skill name


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

一、PlayerPrefs

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

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

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

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

三、Json

1.JSON 语法规则

(1)对象表示为键值对

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

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 属性必须加引号

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

<?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语句

//创建表
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;

标签:XML,存储,string,gender,age,Unity,五种,skill,name
来源: https://www.cnblogs.com/guangzhiruijie/p/15868020.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有