Unity中的數據存儲
數據的本地持久化保存方式:
A. PlayerPrefs:Unity 特有的存儲方式,用於游戲簡單的基本數據存儲。
B. XML:跨平台公認標准,兼容性好。
C. JSON:輕量級數據模式,跟 XML 一樣具有跨平台特性,同時語法更加簡潔。
D. 數據庫:主流的數據庫都支持,例如 MySQL、SQLite、Oracle 等。
接下來我們主要說是第一種數據存儲方式:PlayerPrefs ,主要用於簡單的單機應用。
PlayerPrefs
在 Unity 里面,提供了一個用於本地持久化保存與讀取的類 —— PlayerPrefs。
工作原理非常簡單,以鍵值對的形式將數據保存在本地文件中,然后程序可以根據這個名稱取出上次保存的數值。
PlayerPrefs 類支持三種數據類型的保存和讀取:浮點型、整型和字符串型。
分別對應的函數為:
SetInt():保存整型數據;
GetInt():讀取整形數據;
SetFloat():保存浮點型數據;
GetFlost():讀取浮點型數據;
SetString():保存字符串型數據;
GetString():讀取字符串型數據;
這些函數的用法基本一致使用 Set 進行保存,使用 Get 進行讀取。在 PlayerPrefs 類中還提供了
PlayerPrefs.DeleteKey (key : string):刪除指定數據;
PlayerPrefs.DeleteAll():刪除全部鍵 ;
PlayerPrefs.HasKey (key : string):判斷數據是否存在;
舉個例子
創建測試腳本,掛載到 Mian Camera(主相機)上:
1 using UnityEngine; 2 3 /// <summary> 4 /// PlayerPrefs數據存儲 5 /// </summary> 6 public class Date : MonoBehaviour 7 { 8 public string set_NAME; 9 public string get_NAME; 10 11 void OnGUI() 12 { 13 GUILayout.BeginHorizontal("box"); 14 GUILayout.Label("姓名:"); 15 set_NAME = GUILayout.TextArea(set_NAME, 200, GUILayout.Width(200)); 16 if (GUILayout.Button("存儲數據")) 17 { 18 //將輸入的姓名保存到本地,命名為_NAME ; 19 PlayerPrefs.SetString("_NAME", set_NAME); 20 } 21 22 GUILayout.EndHorizontal(); 23 GUILayout.BeginHorizontal("box"); 24 if (GUILayout.Button("讀取數據")) 25 { 26 //讀取本地數據中名為_NAME 的數據; 27 get_NAME = PlayerPrefs.GetString("_NAME"); 28 } 29 30 GUILayout.Label("你輸入的姓名:" + get_NAME); 31 GUILayout.EndHorizontal(); 32 } 33 }
運行結果:
PlayerPrefs 數據存儲在哪里
* 在 Mac OS X 平台下,存儲在 ~/Library/Preferences 文件夾,名為 unity.[company name].[product name].plist。
* 在 Windows 平台下,存儲在注冊表的 HKEY_CURRENT_USER\Software[company name][product name] 鍵下。
注意事項
* 數據以鍵值對的形式存儲,可以看做一個字典。
* 數據通過鍵名來讀取,當值不存在時,返回默認值。