【转】 [Unity3D]手机3D游戏开发:场景切换与数据存储(PlayerPrefs 类的介绍与使用)
http://blog.csdn.net/pleasecallmewhy/article/details/8543181
在Unity中的数据存储和iOS中字典的存储基本相同,是通过关键字实现数据存储与调用。
下面来介绍一下Unity用来存储数据的PlayerPrefs 类。
使用PlayerPrefs可以在在游戏会话中保持并访问玩家偏好设置。
在Mac OS X上PlayerPrefs存储在-/Library/PlayerPrefs文件夹,
名文unity/[companyname]\[product name].plist,这里company和product是在Project Setting中设置的,相同
的plist用于在编辑器中运行的工程和独立模式.
在Windows独立模式下,PlayerPrefs被存储在注册表的HKCU Software[companyname]\[product name]键下,这里company和product是在Project Setting中设置的.
在Web模式下,PlayerPrefs存储在Mac OS X的二进制文件-/Library/Preferences/Unity/WebPlayerPrefs中和Windows的%APPDATA%\Unity\WebPlayerPrefs中,一个偏好设置文件对应一个web播放器URL并且文件大小被限制为1兆。如果超出这个限制,SetInt,SetFloat和SetString将不会存储值并相处一个PlayerPrefsException.
类方法
◆ static function DeleteAll(): void
描述:从设置文件中移除所有键和值,谨慎的使用它们。
◆ static function DeleteKey(key: string): void
描述:从设置文件中移除key和它对应的值。
◆ static function GetFloat(key: string, defaultValue: float=OF): float
描述:如果存在,返回设置文件中key对应的值.如果不存在,它将返回defaultValue。
print(PlayerPrefs.GetFlat("Player score"));
◆ static function GetInt(key: string, defaultValue: int): int
描述:返回设置文件中key对应的值,如果存在.如果不存在,它将返回defaultValue。
print(PlayerPrefs.GetInt("Player score"));
◆ static function GetString(key: string, defaultValue: string=**): string
描述:返回设置文件中key对应的值,如果存在.如果不存在,它将返回defaultValue.
print(PlayerPrefs.GetString("Player Name"));
◆ static function HasKey(key: string): bool
描述:在设置文件如果存在key则返回真.
◆ static function SetFloat(key: string, value: float): void
描述:设置由key确定的值.
print(PlayerPrefs.SetFloat("Player Score", 10.0));
◆ static function SetInt(key: string, value: int): void
描述:设置由key确定的值.
PlayerPrefs.SetInt("Player Score", 10);
◆ static function SetString(key: string, value: string): void
描述:设置由key确定的值.
PlayerPrefs.Setstring("Player Name", "Foobar");
下面通过一个案例简单的演示一下。
首先创建两个场景用来实现场景的跳转,命名为CSDNPrefabs1和CSDNPrefabs2来做实验。
基本需求是在第一个场景中创建一些数据并且跳转到第二个场景中显示出来。
创建一个Scene1.cs脚本:
- using UnityEngine;
- using System.Collections;
- public class Scene0Main : MonoBehaviour {
- //储存数据的显示
- public string testStr;
- public string testInt;
- public string testFloat;
- //GUI皮肤 为上面我们添加的皮肤
- //在外面用鼠标拖动上为它赋值
- public GUISkin fontSkin;
- //显示的图片
- public Texture Imagetexture;
- // Use this for initialization
- void Start () {
- //读取key的值
- testStr = PlayerPrefs.GetString("testStr", "default");
- testInt = PlayerPrefs.GetInt("testInt", 0).ToString();
- testFloat = PlayerPrefs.GetFloat("testFloat", 0).ToString();
- }
- // Update is called once per frame
- void Update () {
- }
- void OnGUI() {
- //将GUI的皮肤设置为我们创建的皮肤
- GUI.skin = fontSkin;
- //贴上图片
- GUI.DrawTexture(new Rect((Screen.width - Imagetexture.width) >>1, 10, 120, 120), Imagetexture);
- //添加输入框让用户输入信息,这里面我没有捕获异常,因为用户有可能输入一个不合法的数值
- testStr = GUI.TextField (new Rect(10, 200, 200, 50), testStr, 50);
- testInt = GUI.TextField (new Rect(10, 250, 200, 50), testInt, 50);
- testFloat = GUI.TextField (new Rect(10, 300, 200, 50), testFloat, 50);
- //点击按钮保存所有数据
- if (GUI.Button(new Rect(220, 200, 150, 100), "commit all"))
- {
- PlayerPrefs.SetString("testStr", testStr);
- PlayerPrefs.SetInt("testInt", int.Parse(testInt));
- PlayerPrefs.SetFloat("testFloat", float.Parse(testFloat));
- //切换场景到scene1
- Application.LoadLevel("scene1");
- }
- }
- }
创建一个Scene2.cs脚本:
- using UnityEngine;
- using System.Collections;
- public class scene1Main : MonoBehaviour {
- public string testStr;
- public string testInt;
- public string testFloat;
- public GUISkin fontSkin;
- public Texture Imagetexture;
- // Use this for initialization
- void Start () {
- testStr = PlayerPrefs.GetString("testStr", "default");
- testInt = PlayerPrefs.GetInt("testInt", 0).ToString();
- testFloat = PlayerPrefs.GetFloat("testFloat", 0).ToString();
- }
- void OnGUI() {
- GUI.skin = fontSkin;
- GUI.DrawTexture(new Rect((Screen.width - Imagetexture.width) >>1, 10, 120, 120), Imagetexture);
- //显示label
- GUI.Label(new Rect(10,150,300,50),"testStr = "+ testStr);
- GUI.Label(new Rect(10,200,300,50),"testInt = "+ testInt);
- GUI.Label(new Rect(10,250,300,50),"testFloat = "+ testFloat);
- if (GUI.Button(new Rect(220, 200, 150, 100), "clean all"))
- {
- //删除所有键值
- PlayerPrefs.DeleteAll();
- // 返回场景0
- Application.LoadLevel("scene0");
- }
- if (GUI.Button(new Rect(220, 320, 150, 100), "only return"))
- {
- // 返回场景0
- Application.LoadLevel("scene0");
- }
- }
- }
然后添加相关贴图的GUISkin完成部署:

此时运行会报错,因为这两个场景需要Build:

这是再运行就可以看到这个简单的Demo了。
在这里输入完毕之后点击commit all:

在另一个场景中便也能显示了。
【转】 [Unity3D]手机3D游戏开发:场景切换与数据存储(PlayerPrefs 类的介绍与使用)的更多相关文章
- 手机3D游戏开发:自定义Joystick的相关设置和脚本源码
Joystick在手游开发中非常常见,也就是在手机屏幕上的虚拟操纵杆,但是Unity3D自带的Joystick贴图比较原始,所以经常有使用自定义贴图的需求. 下面就来演示一下如何实现自定义JoySti ...
- Unity3D手机斗地主游戏开发实战(04)_出牌判断大小(已完结)
之前我们实现了叫地主.玩家和电脑自动出牌主要功能,但是还有个问题,出牌的时候,没有有效性检查和比较牌力大小.比如说,出牌3,4,5,目前是可以出牌的,然后下家可以出任何牌如3,6,9. 问题1:出牌检 ...
- Unity3D手机斗地主游戏开发实战(04)_出牌判断大小
之前我们实现了叫地主.玩家和电脑自动出牌主要功能,但是还有个问题,出牌的时候,没有有效性检查和比较牌力大小.比如说,出牌3,4,5,目前是可以出牌的,然后下家可以出任何牌如3,6,9. 问题1:出牌检 ...
- Unity3D手机斗地主游戏开发实战(01)_发牌功能实现
园子荒废多年,闲来无事,用Unity3D来尝试做一个简单的小游戏,一方面是对最近研究的Unity3D有点总结,一方面跟广大的园友相互学习和提高.话不多说,进入正题~ 一.创建项目 1.创建Unity2 ...
- Unity3D手机斗地主游戏开发实战(02)_叫地主功能实现(不定期更新中~~~)
目录 Unity3D手机斗地主游戏开发实战(01)_发牌功能实现 Unity3D手机斗地主游戏开发实战(02)_叫地主功能实现 一.大体思路 前面我们实现了点击开始游戏按钮,系统依次给玩家发牌的逻辑和 ...
- Unity3D手机斗地主游戏开发实战(03)_地主牌显示和出牌逻辑(不定期更新中~~~)
Hi,之前有同学说要我把源码发出来,那我就把半成品源码的链接放在每篇文件的最后,有兴趣的话可以查阅参考,有问题可以跟我私信,也可以关注我的个人公众号,互相交流嘛.当然,代码也是在不断的持续改进中~ 上 ...
- Unity3D手机斗地主游戏开发实战(02)_叫地主功能实现
大体思路 前面我们实现了点击开始游戏按钮,系统依次给玩家发牌的逻辑和动画,并展示当前的手牌.这期我们继续实现接下来的功能--叫地主. 1.首先这两天,学习了DOTween,这是一个强大的Unity动画 ...
- Unity 4.2.0 官方最新破解版(Unity3D 最新破解版,3D游戏开发工具和游戏引擎套件)
Unity是一款跨平台的游戏开发工具,从一开始就被设计成易于使用的产品.作为一个完全集成的专业级应用,Unity还包含了价值数百万美元的功能强大的游戏引擎.Unity作为一个游戏开发工具,它的设计主旨 ...
- Unity3D ——强大的跨平台3D游戏开发工具(六)
第十一章 制作炮台的旋转 大家知道,炮台需要向四周不同的角度发射炮弹,这就需要我们将炮台设置成为会旋转的物体,接下来我们就一起制作一个会旋转的炮台. 第一步:给炮台的炮筒添加旋转函数. 给炮台的炮筒部 ...
随机推荐
- 如何在ABAP Netweaver和CloudFoundry里记录并查看日志
Netweaver 要记录日志需要有一个checkpoint group,可以自行创建也可以使用标准的.这里我重用标准的group:DEMO_CHECKPOINT_GROUP. tcode SAAB, ...
- netcat 详解
简介 netcat 是一款调试 TCP/UDP 网络连接的利器,常被称作网络调试的瑞士军刀,可见其功能强大. netcat 在 Linux, Windows 等各大操作系统上都有对应等发行版,以下以 ...
- [VC]vc中socket编程步骤
sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW): 基于TCP的socket编程是采用的流式套接字.在这个 ...
- memcached for .net on windows
memcached for windowshttp://www.cnblogs.com/dudu/archive/2009/07/19/1526407.htmlhttp://www.cnblogs.c ...
- 利用Python实现 队列的算法
以下内容都是来自“悟空“大神的讲解,听他的视频课,利用Python实现堆栈的算法,自己做了一些小总结,可能会存在自己理解的一些误区, 1.栈的实现 队列的特征是先进先出,同我们生活中的队列具有相同的特 ...
- BZOJ3932(主席树上二分+差分
按时间作为主席树的版本,每个版本的主席树都是一个权值线段树. 差分消去时间影响 对于当前时间版本的主席树查询前K大即可. 树上二分时结束后切记判定l==r的状态(易错 l==r叶子节点可能存在多个值( ...
- 漫谈 Clustering (番外篇): Expectation Maximization
Expectation Maximization (EM) 是一种以迭代的方式来解决一类特殊最大似然 (Maximum Likelihood) 问题的方法,这类问题通常是无法直接求得最优解,但是如果引 ...
- bootstrap2文档的学习
就像刚开始的 优雅,直观,强大的前端框架,让web开发更快,更容易,bootstrap给我的感觉就是把常用的布局,组件(导航,列表,按钮,表格),还有规范化颜色等等,同时它的遍历不至于此,他还支持了自 ...
- Drupal7新装一个主题时页面白屏,如何设置一个默认主题?
问题: 请问我不小心退出登陆了 但这个主题没有登录口 而且之前不知道为什么我其他界面都不能显示内容所以 ?q=user 也不行,怎么办呢?看网上说更换默认主题 去variable表里把默认主题换了,我 ...
- java面向对象思想1
1.面向对象是面向过程而言.两者都是一种思想.面向过程:强调的是功能行为.(强调过程.动作)面向对象:将功能封装进对象,强调了具备了功能的对象.(强调对象.事物)面向对象是基于面向过程的.将复杂的事情 ...