转自: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 }
我们这里直接将脚本绑定到摄像机上,然后将项目编译,注意将两个场景放入编译序列,我们运行程序: