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;