Unity3D游戏开发数据持久化PlayerPrefs的用法详解

小编今天研究了在Unity3D中的数据持久化问题。数据持久化在任何一个开发领域都是一个值得关注的问题,小到一个应用中配置文件的读写,大到数据库的管理维护,都可以看到数据持久化的身影。小编在《C#基于Linq和反射实现数据持久化框架Xml4DB》这篇文章中曾介绍了博主在寒假期间开发的Xml4DB框架,这是一个基于Xml的轻量级数据持久化框架,可以采用面向对象的方式来处理数据。数据持久化从某种意义上来说,就是序列化和反序列化化的过程。在.NET中我们可以将对象序列化为Xml、Json、二进制。然后通过反序列化重新获得对象。同样,在Android中我们可以通过使用Preferences来存储键值型数据来实现数据持久化(当然还有其它的方式,这里只是为了强调键值型数据)。那么,在Unity3D中如何实现数据持久化呢?请大家跟随我一起走进今天的文章:[Unity3D]Unity3D游戏开发之数据持久化PlayerPrefs的使用

首先我们来看两段Unity3D中实现数据读写的简单代码吧:

 //保存数据
 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,主要的类方法有:

 static function DeleteAll(): void
 描述:从设置文件中移除所有键和值,谨慎的使用它们。

 static function DeleteKey(key: string): void
 描述:从设置文件中移除key和它对应的值。

 static function GetFloat(key: string, defaultValue: float=OF): float
 描述:如果存在,返回设置文件中key对应的值.如果不存在,它将返回defaultValue。

 static function GetInt(key: string, defaultValue: int): int
 描述:返回设置文件中key对应的值,如果存在.如果不存在,它将返回defaultValue。

 static function GetString(key: string, defaultValue: string=**): string
 描述:返回设置文件中key对应的值,如果存在.如果不存在,它将返回defaultValue.

 static function HasKey(key: string): bool
 描述:在设置文件如果存在key则返回真.

 static function SetFloat(key: string, value: float): void
 描述:设置由key确定的值.

 static function SetInt(key: string, value: int): void
 描述:设置由key确定的值.

 static function SetString(key: string, value: string): void
 描述:设置由key确定的值.

好了,在了解layerPrefs的主要方法后,我们以一个具体的例子来学习Unity3D中数据持久化的实现,我们希望实现在一个场景中输入信息以便在新场景中读取信息。我们直接创建两个场景,分别命名为Scene0、Scene1(据说程序员数数都是从0开始的,哈哈),场景中保留主摄像机即可。接下来我们分别为两个场景编写脚本:

第一个场景的脚本:

using UnityEngine;
using System.Collections;

public class Scene1Script : MonoBehaviour {

	//姓名
	private string mName="路人甲";
	//年龄
	private int mAge=20;
	//成绩
	private float mGrade=75.5F;

	void OnGUI()
	{
		GUILayout.Label("Unity3D数据存储示例程序",GUILayout.Height(25));
		//姓名
		GUILayout.Label("请输入姓名:",GUILayout.Height(25));
	 mName=GUILayout.TextField(mName,GUILayout.Height(25));
		//年龄
		GUILayout.Label("请输入年龄:",GUILayout.Height(25));
	 mAge=int.Parse(GUILayout.TextField(mAge.ToString(),GUILayout.Height(25)));
		//成绩
		GUILayout.Label("请输入成绩:",GUILayout.Height(25));
	 mGrade=float.Parse(GUILayout.TextField(mGrade.ToString(),GUILayout.Height(25)));

		//提交数据
		if(GUILayout.Button("提交数据",GUILayout.Height(25)))
		{
		 //保存数据
		 PlayerPrefs.SetString("Name",mName);
		 PlayerPrefs.SetInt("Age",mAge);
		 PlayerPrefs.SetFloat("Grade",mGrade);

		 //切换到新场景
			Application.LoadLevel("Scene1");
		}
	}
}

第二个场景的脚本:

using UnityEngine;
using System.Collections;

public class Scene2Script : MonoBehaviour {

	private string mName;
	private int mAge;
	private float mGrade;

	void Start ()
	{
	 //读取数据
	 mName=PlayerPrefs.GetString("Name","DefaultValue");
	 mAge=PlayerPrefs.GetInt("Age",0);
	 mGrade=PlayerPrefs.GetFloat("Grade",0F);
	}

	void OnGUI()
	{
	 GUILayout.Label("Unity3D数据存储示例程序",GUILayout.Height(25));
	 //姓名
	 GUILayout.Label("姓名:"+mName,GUILayout.Height(25));
	 //年龄
	 GUILayout.Label("年龄:"+mAge,GUILayout.Height(25));
	 //成绩
	 GUILayout.Label("成绩:"+mGrade,GUILayout.Height(25));

	 //删除数据
	 if(GUILayout.Button("清除数据",GUILayout.Height(25)))
	 {
   PlayerPrefs.DeleteAll();
	 }

	 //返回Scene0
	 if(GUILayout.Button("返回场景",GUILayout.Height(25)))
	 {
   Application.LoadLevel("Scene0");
	 }

	}
}

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

(0)

相关推荐

  • Unity3D游戏开发数据持久化PlayerPrefs的用法详解

    小编今天研究了在Unity3D中的数据持久化问题.数据持久化在任何一个开发领域都是一个值得关注的问题,小到一个应用中配置文件的读写,大到数据库的管理维护,都可以看到数据持久化的身影.小编在<C#基于Linq和反射实现数据持久化框架Xml4DB>这篇文章中曾介绍了博主在寒假期间开发的Xml4DB框架,这是一个基于Xml的轻量级数据持久化框架,可以采用面向对象的方式来处理数据.数据持久化从某种意义上来说,就是序列化和反序列化化的过程.在.NET中我们可以将对象序列化为Xml.Json.二进制.然后

  • 基于MyBatis的数据持久化框架的使用详解

    目录 一.MyBatis是什么 1.1.概述 1.2.什么是持久化 1.3.什么是ORM 1.4.MyBatis主要内容 1.5.优点 1.6.缺点 二.MyBatis架构 2.1.mybatis所依赖的jar包 2.2.MyBatis准备工作 三.MyBatis 核心对象 一.MyBatis是什么 1.1.概述 Mybatis是一个优秀的开源.轻量级持久层框架,它对JDBC操作数据库的过程进行封装,简化了加载驱动.创建连接.创建 statement 等繁杂的过程,使开发者只需要关注sql本身.

  • 基于DataFrame筛选数据与loc的用法详解

    DataFrame筛选数据与loc用法 python中pandas下的DataFrame是一个很不错的数据结构,附带了许多操作.运算.统计等功能. 如何从一个DataFrame中筛选中出一个元素呢. 以tushare返回的交易日信息为例. df = ts.trade_cal() 数据如下: calendarDate isOpen 0 1990/12/19 1 1 1990/12/20 1 2 1990/12/21 1 3 1990/12/22 0 4 1990/12/23 0 5 1990/12

  • kubernetes数据持久化PV PVC深入分析详解

    目录 1. 什么是PV,PVC? 1.1 什么是PV 1.2 什么是PVC? 2. PV资源实践 2.1 PV配置字段详解 2.2 HostPath PV示例 2.3 NFS PV示例 3. PVC资源实践 3.1 PVC配置清单详解 3.2 hostPath-PVC示例 3.3 NFS-PV-PVC实践之准备NFS共享存储 3.4 准备NFS-PVC 3.4.1准备Pod并使用PVC 3.4.2 测试数据持久性 1. 什么是PV,PVC? 1.1 什么是PV 官方文档地址: https://k

  • Android数据持久化之ContentProvider机制详解

    本文实例讲述了Android数据持久化之ContentProvider机制.分享给大家供大家参考,具体如下: 一般而言,android操作系统的应用程序所建立的数据只允许自己使用,应用程序彼此间无法借助公用存储器来共享数据,android系统提供了一个机制,即内容提供器(ContentProvider),来公开自己私有的数据到数据内容器,通过该机制,可以供其他应用程序来读取自己内部的数据,当然也可以访问其他应用程序的数据.通常,内容提供器背后都有SQLite数据库的支持,用以存储内容提供内部数据

  • Android数据持久化之Preferences机制详解

    本文实例讲述了Android数据持久化之Preferences机制.分享给大家供大家参考,具体如下: 在Android中,实现数据持久化有五种方式:Preferences,文件File,I/O操作.SQLite数据库,ContentProvider组件. 下面逐个做一简单的介绍: 一.Preferences的介绍: Preferences是一种轻量级的数据存储机制,他将一些简单的数据类型的数据,包括boolean类型,int类型,float类型,long类型以及String类型的数据,以键值对的

  • Android开发之自定义View(视图)用法详解

    本文实例讲述了Android开发之自定义View(视图)用法.分享给大家供大家参考,具体如下: View类是Android的一个超类,这个类几乎包含了所有的屏幕类型.每一个View都有一个用于绘图的画布,这个画布可以进行任意扩展.在游戏开发中往往需要自定义视图(View),这个画布的功能更能满足我们在游戏开发中的需要.在Android中,任何一个View类都只需重写onDraw 方法来实现界面显示,自定义的视图可以是复杂的3D实现,也可以是非常简单的文本形式等. 为了实现自定义View,需要创建

  • vuex中数据持久化插件vuex-persistedstate使用详解

    目录 数据持久化vuex-persistedstate使用 安装起步 配置使用 自定义存储方式 想使用cookie同理 使用vuex-persistedstate插件遇到的问题 数据持久化vuex-persistedstate使用 vuex是在中大型项目中必不可少的状态管理组件,刷新会重新更新状态,但是有时候我们并不希望如此.例如全局相关的,如登录状态.token.以及一些不常更新的状态等,我们更希望能够固化到本地,减少无用的接口访问,以及更佳的用户体验. 安装起步 npm i vuex-per

  • Python Pandas数据合并pd.merge用法详解

    目录 前言 语法 参数 1.连接键 2.索引连接 3.多连接键 4.连接方法 5.连接指示 总结 前言 实现类似SQL的join操作,通过pd.merge()方法可以自由灵活地操作各种逻辑的数据连接.合并等操作 可以将两个DataFrame或Series合并,最终返回一个合并后的DataFrame 语法 pd.merge(left, right, how = 'inner', on = None, left_on = None, right_on = None, left_index = Fal

  • C#编程中常见数据结构的比较(Unity3D游戏开发)

    一.前言 Unity3D是如今最火爆的游戏开发引擎,它可以让我们能轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型的互动内容.它支持2D/3D游戏开发,据不完全统计,目前国内80%的手机游戏都是用Unity3D开发. 由于Unity3D在开发过程中使用最多的是C# 语言,所以就要合理的使用C#提供的一些数据结构是非常有必要的,合理的选择数据结构可以加快开发速度,提高游戏运行性能,不合理的使用数据结构则会导致游戏运行性能降低,加大开发复杂程度! 先通过表格看看常用的数据结构: C#常用数据

随机推荐