码迷,mamicode.com
首页 > 其他好文 > 详细

【Unity3D游戏开发】—— PlayerPrefs类实现本地持久化数据存储

时间:2014-05-14 14:21:51      阅读:311      评论:0      收藏:0      [点我收藏+]

标签:unity3d   游戏   数据存储   

在很多游戏中都会有“存储进度”,“读取进度”等菜单,或者当我们进入下一个场景时有些数据需要带入下一个场景。这就需要数据储存。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.. 添加这两个场景
bubuko.com,布布扣

然后Build and Run就能生成并运行了
bubuko.com,布布扣 
bubuko.com,布布扣

我们的小例子就完成了。unity的数据存储还算是比较简单的。具体还有什么看不见的坑,以后掉进去了才会知道吧。








【Unity3D游戏开发】—— PlayerPrefs类实现本地持久化数据存储,布布扣,bubuko.com

【Unity3D游戏开发】—— PlayerPrefs类实现本地持久化数据存储

标签:unity3d   游戏   数据存储   

原文地址:http://blog.csdn.net/wxk_bigworld/article/details/25723697

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!