[Unity3D]Unity3D持久性数据的游戏开发PlayerPrefs采用
大家好,我是秦培,欢迎关注我的博客,我的博客地址 ">blog.csdn.net/qinyuanpei
博主今天研究了在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");
} }
}
我们这里直接将脚本绑定到摄像机上,然后将项目编译,注意将两个场景放入编译序列。我们执行程序:
好了,这就是今天的内容了,感谢大家关注我的博客。
喜欢我的博客请记住我的名字:秦元培。我的博客地址是:blog.csdn.net/qinyuanpei
转载请注明出处,本文作者:秦元培,本文出处:http://blog.csdn.net/qinyuanpei/article/details/24195977
版权声明:本文博主原创文章,博客,未经同意不得转载。
转载请注明作者和出处,谢谢!
[Unity3D]Unity3D持久性数据的游戏开发PlayerPrefs采用的更多相关文章
- OpenNI结合Unity3D Kinect进行体感游戏开发(转)
OpenNI结合Unity3D Kinect进行体感游戏开发(转) 楼主# 更多 发布于:2012-07-17 16:42 1. 下载安装Unity3D(目前版本为3.4)2. 下载OpenN ...
- Unity3D ——强大的跨平台3D游戏开发工具(六)
第十一章 制作炮台的旋转 大家知道,炮台需要向四周不同的角度发射炮弹,这就需要我们将炮台设置成为会旋转的物体,接下来我们就一起制作一个会旋转的炮台. 第一步:给炮台的炮筒添加旋转函数. 给炮台的炮筒部 ...
- Unity3D ——强大的跨平台3D游戏开发工具(一)
众所周知,Unity3D是一个能够实现轻松创作的多平台的游戏开发工具,是一个全面整合的专业游戏引擎.在现有的版本中,其强大的游戏制作功能已 经达到让人瞠目结舌的地步.尤其是它在3.0版本里面制作的那款 ...
- unity3D实际的原始视频游戏开发系列讲座12之U3D的2D为了开发实战的新方法
U3D的2D为了开发实战的新方法 (Unity3d-4.x的打飞机2D游戏开发新的方法应用 ) 大纲介绍:不使用NGUI和TK2d插件, 使用 U3D内置强大的最大的工具. 开发过程设计到例 ...
- unity3D实际的原始视频游戏开发系列讲座10它《战斗:外来入侵》在第一季度游戏开发
解说文件夹 <保卫战:异形入侵>游戏开发 第一讲 游戏演示和资源的介绍 第二讲 "异形"怪物的实现 第三讲 "异形"怪物生命值的体现 第四讲 ...
- Unity3D ——强大的跨平台3D游戏开发工具(五)
第九章 图形用户界面类G.U.I 您在玩很多3D游戏的时候,不知是否注意到在游戏界面中,总有一些图形和文字信息是不随着3D视角的改变而改变的.这也是由于游戏本身的要求而决定的.比如说英雄的生命值,聊天 ...
- Unity3D ——强大的跨平台3D游戏开发工具(四)
第六章 Unity3D中的C#Script编程的注意事项 也许您在学习Unity3D之前,已经是一位C#的编程高手了.但在Unity3D中的C#并不像真正的C#那般强大,在Unity3D的C#中必须全 ...
- Unity3D ——强大的跨平台3D游戏开发工具(三)
第四章 为地形添加水源.水流以及水下的模糊效果 制作好了地形的各种效果,接下来我们给场景添加一些水效果,使场景更加丰富. 第一步:添加水面 由于我在上一次的地形创作中就已经在山峰之间制作了一块洼地,它 ...
- Unity3D ——强大的跨平台3D游戏开发工具(二)
第二章 Unity3D的简单预览 每个Unity3D版本都会自带一个Demo源文件.在3.0的正式版中,自带的Demo就是网上展示的那款强大的射击游戏.在一般情况下,您只要第一次 打开Unity3D ...
随机推荐
- Solaris 11的自动化安装(AI server)的搭建
solaris 11 总体比solaris 10很多变动的地方,可以去官方网站上面学习:http://www.oracle.com/technetwork/server-storage/solaris ...
- openCV中cvSnakeImage()函数代码分析
/*M/////////////////////////////////////////////////////////////////////////////////////// // // IMP ...
- QNX 多线程 (线程1每隔20ms读取 number;线程2每隔10ms计算一次)
#include <pthread.h>#include <stdio.h>#include <sys/time.h>#include <string.h&g ...
- Linux红黑树(二)——访问节点
核心对红黑树使用两点说明 1.头文件 <Documentation/rbtree.txt> Linux's rbtree implementation lives in the file ...
- vc 加载bmp位图并显示的方法
方法一.显示位图文件 HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,_T(“xxx.bmp”),Image_Bitmap,0,0,Lr_CreateDibSectio ...
- [页面模板框架对比] Apache Tiles VS Sitemesh
1. 原理对比 (1) Apache Tiles 顾名思义,Tile是瓷砖的意思,也就是说一个网页是由多个Tile组成的. 用户通过访问一个页面的Apache Tiles定义名,就可以访问一个由定义文 ...
- OCM读书笔记(2) - PL/SQL 基础
1. % type 用法,提取% type所在字段的类型 declare myid dept.deptno % type; myname dept.dname % type;begin ...
- (step6.3.2)hdu 1068(Girls and Boys——二分图的最大独立集)
题目大意:第一行输入一个整数n,表示有n个节点.在接下来的n行中,每行的输入数据的格式是: 1: (2) 4 6 :表示编号为1的人认识2个人,他们分别是4.6: 求,最多能找到多少个人,他们互不认识 ...
- 再说Java EE
说到JavaEE(曾经叫J2EE)是什么,你可能回答:JavaEE是一组规范,这么说是没错,可是自己不认为这个答案非常大.非常空么?什么又是规范?规范能组成应用么?能在JVM中跑起来么?要理解这些,先 ...
- 14.5.2 Changing the Number or Size of InnoDB Redo Log Files 改变InnoDB Redo Log Files的数量
14.5.2 Changing the Number or Size of InnoDB Redo Log Files 改变InnoDB Redo Log Files的数量 改变InnoDB redo ...