Unity(游戲)中五種數據存儲的方法


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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM