在很多游戏中都会有“存储进度”,“读取进度”等菜单,或者当我们进入下一个场景时有些数据需要带入下一个场景。这就需要数据储存。Unity中提供了一个用于本地持久化保存于读取数据的类——PlayerPrefs。 它是以键值对的形式将数据保存在文件中。
下面来看看PlayerPrefs的简单用法。、
//得到存储的数据 Grade = PlayerPrefs.GetFloat("mGrade", 0.0f).ToString(); //获取浮点型 Age = PlayerPrefs.GetInt("mAge", 0).ToString(); //获取整型 Name = PlayerPrefs.GetString("mName", ""); //获取字符串 //储存数据 PlayerPrefs.SetString("mName", Name); //设置字符串 PlayerPrefs.SetInt("mAge", int.Parse(Age)); //设置整型 PlayerPrefs.SetFloat("mGrade", float.Parse(Grade)); //设置浮点型
从上面例子就反应了PlayerPrefs的基本特征
1.存储方式以键值对存储,类似于数据字典
2.读取也是以键值对来读取,若无则返回默认值
3.PlayerPrefs类可保存三种类型,浮点型,整型,字符串型.
下面是一个小例子,在场景1输入数据,跳转到场景2来显示数据。
场景1代码:
using UnityEngine; using System.Collections; public class Scene1 : MonoBehaviour { //储存持久化数据显示 //可以保存3种类型,浮点型,整型,字符串型 public string Grade; public string Age; public string Name; //图片贴图 public Texture image; void Start() { //得到存储的数据 Grade = PlayerPrefs.GetFloat("mGrade", 0.0f).ToString(); Age = PlayerPrefs.GetInt("mAge", 0).ToString(); Name = PlayerPrefs.GetString("mName", ""); } void OnGUI() { //一张图片贴图 GUI.DrawTexture(new Rect((Screen.width - image.width) / 2, 20, 120, 120), image); //输入姓名 GUILayout.Label("----请输入姓名-----", GUILayout.Height(25)); Name = GUILayout.TextField(Name, GUILayout.Height(25)); //输入年龄 GUILayout.Label("----请输入年龄-----", GUILayout.Height(25)); Age = GUILayout.TextField(Age, GUILayout.Height(25)); //输入成绩 GUILayout.Label("----请输入成绩-----", GUILayout.Height(25)); Grade = GUILayout.TextField(Grade, GUILayout.Height(25)); //提交并跳转至下一个场景 if (GUILayout.Button("提交",GUILayout.Height(25))) { //储存数据 PlayerPrefs.SetString("mName", Name); PlayerPrefs.SetInt("mAge", int.Parse(Age)); PlayerPrefs.SetFloat("mGrade", float.Parse(Grade)); //跳转到场景2 Application.LoadLevel("scene2"); } } }
场景2代码:
using UnityEngine; using System.Collections; public class Scene2 : MonoBehaviour { //储存持久化数据显示 //可以保存3种类型,浮点型,整型,字符串型 public string Grade; public string Age; public string Name; //图片贴图 public Texture image; void Start() { //得到存储的数据 Grade = PlayerPrefs.GetFloat("mGrade", 0.0f).ToString(); Age = PlayerPrefs.GetInt("mAge", 0).ToString(); Name = PlayerPrefs.GetString("mName", ""); } void OnGUI() { //一张图片贴图 GUI.DrawTexture(new Rect((Screen.width - image.width) / 2, 20, 120, 120), image); //显示名字 GUILayout.Label("姓名: " + Name, GUILayout.Height(25)); //显示年龄 GUILayout.Label("年龄: " + Age, GUILayout.Height(25)); //显示成绩 GUILayout.Label("成绩: " + Grade, GUILayout.Height(25)); //清除数据 if (GUILayout.Button("清除数据", GUILayout.Height(25))) { PlayerPrefs.DeleteAll(); } if (GUILayout.Button("返回上一页", GUILayout.Height(25))) { //返回场景1 Application.LoadLevel("scene1"); } } }
将上述代码分别绑定在两个场景的摄像机上即可
点击File -> Build Settings.. 添加这两个场景
然后Build and Run就能生成并运行了
我们的小例子就完成了。unity的数据存储还算是比较简单的。具体还有什么看不见的坑,以后掉进去了才会知道吧。
【Unity3D游戏开发】—— PlayerPrefs类实现本地持久化数据存储
时间: 2024-11-08 21:52:38