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

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

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

Unity3D游戏开发之详解 Animation类和Animator类

Unity3D游戏开发之详解 Animation类和Animator类 Animation类 animation组件用于播放动画.可以指定动画剪辑到动画组件并从脚本控制动画播放.在Unity的动画系统基于权重并且支持动画融合,叠加动画,动画混合,标签和完全控制动画播放的各个方面. 如果想播放一个简单的动画,可以使用Animation.Play:如果想在动画之间交叉淡入,可以使用Animation.CrossFade:如果想改变动画模式(循环,一次,乒乓),可以改变动画导入设置里面的动画帧的Wra

Unity3D游戏开发从零单排(四) - 制作一个iOS游戏

提要 此篇是一个国外教程的翻译,虽然有点老,但是适合新手入门.自己去写代码,debug,布置场景,可以收获到很多.游戏邦上已经有前面两部分的译文,这里翻译的是游戏的最后一个部分. 欢迎回来 在第一篇中,我们学会了怎么在Unity中搭建游戏的场景,并且设置模型的物理属性. 在第二篇中,我们学会了怎么在unity中使用脚本,并且创建了大部分的游戏逻辑,包括投球和得分! 在这最后一节中,我们将会为用户创建一个菜单系统,并且和GameController进行交互,我们开始吧. 在设备上测试 到目前为止,

Unity3D游戏开发初探—2.初步了解3D模型基础

一.什么是3D模型? 1.1 3D模型概述 简而言之,3D模型就是三维的.立体的模型,D是英文Dimensions的缩写. 3D模型也可以说是用3Ds MAX建造的立体模型,包括各种建筑.人物.植被.机械等等,比如一个大楼的3D模型图.3D模型也包括玩具和电脑模型领域. 互联网的形态一直以来都是2D模式的,但是随着3D技术的不断进步,在未来的时间里,将会有越来越多的互联网应用以3D的方式呈现给用户,包括网络视讯.电子阅读.网络游戏.虚拟社区.电子商务.远程教育等等.甚至对于旅游业,3D互联网也能

[Unity3D]Unity3D游戏开发之异步记载场景并实现进度条读取效果

大家好,我是秦元培.欢迎大家关注我的博客,我的博客地址是:blog.csdn.net/qinyuanpei.终于在各种无语的论文作业中解脱了,所以立即抓紧时间来这里更新博客.博主本来计划在Unity3D游戏开发之从<魂斗罗>游戏说起(上)--目标追踪这篇文章后再写一篇<Unity3D游戏开发之从<魂斗罗>游戏说起(下)>,只是眼下博主的项目进度有些缓慢,所以想等项目稳定下来以后再和大家分享. 作为大家等待博主更新博客的回报,我们今天来说一说Unity3D中的游戏场景异步

Unity3D游戏开发从零单排(五) - 导入CS模型到Unity3D

游戏动画基础 Animation组件 Animation组件是对于老的动画系统来说的. 老的动画形同对应的动画就是clip,每个运动都是一段单独的动画,使用Play()或CrossFade(),直接播放动画 或淡入淡出播放动画. animation.Play("name"); animation.CrossFade("name"); 下面的是它的几个属性 Animation:默认的动画片段: Aniamtions:包含的动画片段: Play Automaticall

Unity3D游戏开发之当游戏开发遇上Excel

各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是http://blog.csdn.net/qinyuanpei. 今天我们的话题是Excel,作为常用的办公软件的Excel相信大家都不陌生啦.可是如果我们认为Excel只是办公软件的话,那么这就不只是天真而是Out了.事实上Excel和游戏开发有着密切的联系,不知道大家还记不记得那款利用Excel开发出来的三国杀,这可能是Excel第一次以游戏开发的身份出现在大家面前吧.我们知道在游戏开发领域有一种工作叫做策划,就像在软件开发领

Unity3D游戏开发之多线程及使用多线程

Unity3D游戏开发之多线程及使用多线程 Unity3D中的多线程.线程是一个相当复杂的话题,但如果掌握了它,就可以从容的使用多个硬件处理器或处理很难划分管理数据块. 如在场景中用A*算法进行大量的数据计算,变形网格中操作大量的顶点,持续的要运行上传数据到服务器,二维码识别等图像处理,如果同时你要处理很多事情或者与Unity的对象互动小可以用thread,否则使用coroutine. 线程是在程序中与其他线程同时运行的进行.在多处理器的计算机上可以做到多个线程的真正的同步,更多的线程取决于有多

Unity3D游戏开发之如何截屏的技能培训

下面我们开始今天的Unity3D技能培训. 我们学习Unity3D培训目标:让U3D初学者可以更快速的掌握U3D技术,自行制作修改素材,可以独立完成2D.3D小规模游戏及网页游戏开发. 今天我们来做点简单的东西,做个什么呢?答案就是截屏.作为一名热爱单机游戏的玩家,每次在玩游戏的同时截取游戏中比较喜欢的画面,特别是学习了Unity3D以后玩游戏的时候更多地是从一个游戏设计者的角度来看待游戏,换句话说,可能关注技术的成分更多一点吧.比如在写<Unity3D游戏开发之自由视角下的角色控制>和<

第一篇:Unity3d游戏开发之移动端完整包更新方案

由于Unity没法进行热更新,也就是局部更新,所以如果你在设计之前没有考虑好使用Lua,反射,或者其他方式实现热更新,但是又要面临游戏上线那么你可以考虑使用完整包更新,其实这对于游戏包不是很大的情况下,也是一个不错的选择,当然设计者在设计之初都想好了热更新那就宁当别论了. Unity3d 在移动端考虑Android和Ios平台的完整包更新 实现逻辑: 首先检查本地的版本和服务器的版本是否相同,如果相同则直接进入游戏,如果不同则下载服务器的最新文件,然后根据最新文件到资源服务器下载最新的安装包 我