Unity3D游戏开发之数据持久化PlayerPrefs的使用

            转自:http://www.it165.net/pro/html/201404/12519.html;  秦元培的。  他的博客地址是:blog.csdn.net/qinyuanpei。

1.//保存数据
PlayerPrefs.SetString("Name",mName);
PlayerPrefs.SetInt("Age",mAge);
PlayerPrefs.SetFloat("Grade",mGrade)
//读取数据
mName=PlayerPrefs.GetString("Name","DefaultValue");
mAge=PlayerPrefs.GetInt("Age",0);
mGrade=PlayerPrefs.GetFloat("Grade",0F);

 

通过上面两段代码,我们可以发现两点:

1、Unity3D中的数据持久化是以键值的形式存储的,可以看作是一个字典。

2、Unity3D中值是通过键名来读取的,当值不存在时,返回默认值。

目前,在Unity3D中只支持int、string、float三种数据类型的读取,所以我们可以使用这三种数据类型来存储简单的数据。目前Unity3D中用于数据持久化的类为layerPrefs,主要的类方法有:

 

好了,在了解layerPrefs的主要方法后,我们以一个具体的例子来学习Unity3D中数据持久化的实现,我们希望实现在一个场景中输入信息以便在新场景中

 1 static function DeleteAll(): void
 2 描述:从设置文件中移除所有键和值,谨慎的使用它们。
 3 static function DeleteKey(key: string): void
 4 描述:从设置文件中移除key和它对应的值。
 5 static function GetFloat(key: string, defaultValue: float=OF): float
 6 描述:如果存在,返回设置文件中key对应的值.如果不存在,它将返回defaultValue。
 7 static function GetInt(key: string, defaultValue: int): int
 8 描述:返回设置文件中key对应的值,如果存在.如果不存在,它将返回defaultValue。
 9 static function GetString(key: string, defaultValue: string=**): string
10 描述:返回设置文件中key对应的值,如果存在.如果不存在,它将返回defaultValue.
11 static function HasKey(key: string): bool
12 描述:在设置文件如果存在key则返回真.
13 static function SetFloat(key: string, value: float): void
14 描述:设置由key确定的值.
15 static function SetInt(key: string, value: int): void
16 描述:设置由key确定的值.
17 static function SetString(key: string, value: string): void
18 描述:设置由key确定的值.

 

读取信息。我们直接创建两个场景,分别命名为Scene0、Scene1(据说程序员数数都是从0开始的,哈哈),场景中保留主摄像机即可。接下来我们分别为两个场景编写脚本:

 

第一个场景的脚本:

 1 using UnityEngine;
 2 using System.Collections;
 3 public class Scene1Script : MonoBehaviour {
 4 //姓名
 5 private string mName="路人甲";
 6 //年龄
 7 private int mAge=20;
 8 //成绩
 9 private float mGrade=75.5F;
10 void OnGUI()
11 {
12 GUILayout.Label("Unity3D数据存储示例程序",GUILayout.Height(25));
13 //姓名
14 GUILayout.Label("请输入姓名:",GUILayout.Height(25));
15 mName=GUILayout.TextField(mName,GUILayout.Height(25));
16 //年龄
17 GUILayout.Label("请输入年龄:",GUILayout.Height(25));
18 mAge=int.Parse(GUILayout.TextField(mAge.ToString(),GUILayout.Height(25)));
19 //成绩
20 GUILayout.Label("请输入成绩:",GUILayout.Height(25));
21 mGrade=float.Parse(GUILayout.TextField(mGrade.ToString(),GUILayout.Height(25)));
22 //提交数据
23 if(GUILayout.Button("提交数据",GUILayout.Height(25)))
24 {
25 //保存数据
26 PlayerPrefs.SetString("Name",mName);
27 PlayerPrefs.SetInt("Age",mAge);
28 PlayerPrefs.SetFloat("Grade",mGrade);
29 //切换到新场景
30 Application.LoadLevel("Scene1");
31 }
32 }
33 }

 

 

第二个场景的脚本:

 

 1 using UnityEngine;
 2 using System.Collections;
 3 public class Scene2Script : MonoBehaviour {
 4 private string mName;
 5 private int mAge;
 6 private float mGrade;
 7 void Start ()
 8 //读取数据
 9 mName=PlayerPrefs.GetString("Name","DefaultValue");
10 mAge=PlayerPrefs.GetInt("Age",0);
11 mGrade=PlayerPrefs.GetFloat("Grade",0F);
12 }
13 void OnGUI()
14 {
15 GUILayout.Label("Unity3D数据存储示例程序",GUILayout.Height(25));
16 //姓名
17 GUILayout.Label("姓名:"+mName,GUILayout.Height(25));
18 //年龄
19 GUILayout.Label("年龄:"+mAge,GUILayout.Height(25));
20 //成绩
21 GUILayout.Label("成绩:"+mGrade,GUILayout.Height(25));
22  
23 //删除数据
24 if(GUILayout.Button("清除数据",GUILayout.Height(25)))
25 {
26 PlayerPrefs.DeleteAll();
27 }
28 //返回Scene0
29 if(GUILayout.Button("返回场景",GUILayout.Height(25)))
30 {
31 Application.LoadLevel("Scene0");
32 }
33 }
34 }

 

我们这里直接将脚本绑定到摄像机上,然后将项目编译,注意将两个场景放入编译序列,我们运行程序:

posted on 2016-10-31 15:10  萨瓦迪卡麦兜兜  阅读(8725)  评论(0编辑  收藏  举报

导航