Unity 数据存储
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] 键下。
注意事项
* 数据以键值对的形式存储,可以看做一个字典。
* 数据通过键名来读取,当值不存在时,返回默认值。