【转】 [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脚本:

[csharp] view plain copy

  1. using UnityEngine;
  2. using System.Collections;
  3. public class Scene0Main : MonoBehaviour {
  4. //储存数据的显示
  5. public string testStr;
  6. public string testInt;
  7. public string testFloat;
  8. //GUI皮肤 为上面我们添加的皮肤
  9. //在外面用鼠标拖动上为它赋值
  10. public GUISkin fontSkin;
  11. //显示的图片
  12. public Texture Imagetexture;
  13. // Use this for initialization
  14. void Start () {
  15. //读取key的值
  16. testStr = PlayerPrefs.GetString("testStr", "default");
  17. testInt = PlayerPrefs.GetInt("testInt", 0).ToString();
  18. testFloat = PlayerPrefs.GetFloat("testFloat", 0).ToString();
  19. }
  20. // Update is called once per frame
  21. void Update () {
  22. }
  23. void OnGUI() {
  24. //将GUI的皮肤设置为我们创建的皮肤
  25. GUI.skin = fontSkin;
  26. //贴上图片
  27. GUI.DrawTexture(new Rect((Screen.width - Imagetexture.width) >>1, 10, 120, 120), Imagetexture);
  28. //添加输入框让用户输入信息,这里面我没有捕获异常,因为用户有可能输入一个不合法的数值
  29. testStr = GUI.TextField (new Rect(10, 200, 200, 50), testStr, 50);
  30. testInt = GUI.TextField (new Rect(10, 250, 200, 50), testInt, 50);
  31. testFloat = GUI.TextField (new Rect(10, 300, 200, 50), testFloat, 50);
  32. //点击按钮保存所有数据
  33. if (GUI.Button(new Rect(220, 200, 150, 100), "commit all"))
  34. {
  35. PlayerPrefs.SetString("testStr", testStr);
  36. PlayerPrefs.SetInt("testInt", int.Parse(testInt));
  37. PlayerPrefs.SetFloat("testFloat", float.Parse(testFloat));
  38. //切换场景到scene1
  39. Application.LoadLevel("scene1");
  40. }
  41. }
  42. }

创建一个Scene2.cs脚本:

[csharp] view plain copy

  1. using UnityEngine;
  2. using System.Collections;
  3. public class scene1Main : MonoBehaviour {
  4. public string testStr;
  5. public string testInt;
  6. public string testFloat;
  7. public GUISkin fontSkin;
  8. public Texture Imagetexture;
  9. // Use this for initialization
  10. void Start () {
  11. testStr = PlayerPrefs.GetString("testStr", "default");
  12. testInt = PlayerPrefs.GetInt("testInt", 0).ToString();
  13. testFloat = PlayerPrefs.GetFloat("testFloat", 0).ToString();
  14. }
  15. void OnGUI() {
  16. GUI.skin = fontSkin;
  17. GUI.DrawTexture(new Rect((Screen.width - Imagetexture.width) >>1, 10, 120, 120), Imagetexture);
  18. //显示label
  19. GUI.Label(new Rect(10,150,300,50),"testStr = "+ testStr);
  20. GUI.Label(new Rect(10,200,300,50),"testInt = "+ testInt);
  21. GUI.Label(new Rect(10,250,300,50),"testFloat = "+ testFloat);
  22. if (GUI.Button(new Rect(220, 200, 150, 100), "clean all"))
  23. {
  24. //删除所有键值
  25. PlayerPrefs.DeleteAll();
  26. // 返回场景0
  27. Application.LoadLevel("scene0");
  28. }
  29. if (GUI.Button(new Rect(220, 320, 150, 100), "only return"))
  30. {
  31. // 返回场景0
  32. Application.LoadLevel("scene0");
  33. }
  34. }
  35. }

然后添加相关贴图的GUISkin完成部署:

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

这是再运行就可以看到这个简单的Demo了。

在这里输入完毕之后点击commit all:

在另一个场景中便也能显示了。

时间: 2024-10-05 04:45:01

【转】 [Unity3D]手机3D游戏开发:场景切换与数据存储(PlayerPrefs 类的介绍与使用)的相关文章

Unity3D手机斗地主游戏开发实战(02)_叫地主功能实现(不定期更新中~~~)

系列目录 Unity3D手机斗地主游戏开发实战(01)_发牌功能实现 Unity3D手机斗地主游戏开发实战(02)_叫地主功能实现 一.大体思路 前面我们实现了点击开始游戏按钮,系统依次给玩家发牌的逻辑和动画,并展示当前的手牌.这期我们继续实现接下来的功能--叫地主. 1.首先这两天,学习了DOTween,这是一个强大的Unity动画插件,大家可以参考:官方文档,个人感觉DOTween还是比较好用的. 好的,我们先来重构一下动画部分的代码(没有绝对牛逼的架构和设计,项目过程中不要不断的持续改进嘛

Unity3D手机斗地主游戏开发实战(03)_地主牌显示和出牌逻辑(不定期更新中~~~)

Hi,之前有同学说要我把源码发出来,那我就把半成品源码的链接放在每篇文件的最后,有兴趣的话可以查阅参考,有问题可以跟我私信,也可以关注我的个人公众号,互相交流嘛.当然,代码也是在不断的持续改进中~ 上期我们实现了叫地主功能,不过遗留了一个小功能:叫地主完成以后,要显示地主的3张牌,这期首先弥补这块的功能: 接着我们要进入开发出牌逻辑的开发阶段,好了,废话不多说,继续我们斗地主开发之旅~ 地主牌的显示 我们在玩家界面的顶部中间位置,放置一个新的GameObject,命名为BidCards,用来记录

Android+3D游戏开发技术详解与典型案例

 内容导读 本书共分两篇,第一篇介绍了Android 3D游戏开发的基础知识,主要对OpenGL ES的相关内容进行了介绍. 章 名主 要 内 容 第1章 英雄还看今朝-Android简介本章介绍了市场上主流的手机平台,同时也分析了未来手机平台的发展趋势及Android平台的前景 第2章 数风流人物-当前流行游戏类型简介本章以分类的方式简要地介绍了当前流行的游戏的玩法,游戏的视觉效果,游戏的设计及<仙剑>等著名游戏的历史 第3章 不积跬步,无以至千里-游戏开发基础知识本章初步介绍了游戏开发的基

学期总结之3D游戏开发

这学期我上了3D游戏开发课,因为我一直对3D游戏感兴趣,所以想了解一下开发所需要的技术.这门课从人工智能,光照模型,贴图,凹凸纹理上对3D游戏进行了一个初步的介绍.这门课主要介绍的是OSG,一个基于OpenGL的图形引擎,它的主要特点是树结构的“场景图”,即将3D场景描述为一棵树,比如一个笔的模型,可以描述为笔和笔帽,还可以继续细分. 它的主要特点为:高性能:采用场景图形的数据组织方式,并支持投影.隐藏面.微小场景的剔除. LOD .状态管理等. 高效率:OSG几乎提供了OpenGL所有功能的封

Unity3D制作3D虚拟漫游场景(二)

传送门: Unity3D制作3D虚拟漫游场景(一) -------------------------------------------------------------------------- 昨天已经完成了场景的基本搭建,今天先简单的实现城市漫游功能,具体细节之后再进行添加 1.导入人物 在Assets文件夹下,新建一个文件夹,用于存放预制体,命名为Prefabs 打开昨天导入进去的SimplePeople资源包,打开其中的示例场景,然后我们可以进去挑选人物啦~ 博主在这里选了一个画风

【Unity】1.0 第1章 Unity&mdash;3D游戏开发和虚拟现实应用开发的首选

分类:Unity.C#.VS2015 创建日期:2016-03-23 一.简介 Unity是跨平台2D.3D游戏和虚拟现实高级应用程序的专业开发引擎,是由Unity Technologies公司研制的一个让玩家轻松创建诸如虚拟现实场景再现.三维视频游戏.建筑设计可视化.实时三维动画展现等类型互动内容的多平台综合型开发工具,是一个全面整合的跨平台专业3D开发引擎. 全球超过70%的手机3D游戏都是用Unity来开发的. 1.能部署到20多个平台上 Unity类似于Director,Blender

Unity 3D游戏开发引擎:最火的插件推荐

摘要:为了帮助使用Unity引擎的开发者制作更完美的游戏,我们精心挑选了十款Unity相关开发插件和工具.它们是:2D Toolkit.NGUI.Playmaker.EasyTouch & EasyJoystick.UnIDE.Tile Based Map and Nav.FX Maker.Toon shader.Top-Down Assets Mobile和83 Explosion Sound Effects. 作为当前最主流的3D游戏引擎之一,Unity拥有大量第三方插件和工具帮助开发者提升

Android开发经典书籍下载——《Android 4高级编程》《疯狂Android讲义》《Android应用开发详解(郭宏志)》《Android应用案例开发大全》《Android 3D游戏开发技术》

这是我收集的关于android开发方面的经典书籍,高清PDF电子版,可以在我的百度网盘免费下载,希望对需要的朋友有帮助. 目录: <Android 4高级编程>(附完整源代码) <疯狂Android讲义> <Android应用开发详解(郭宏志)> <Android应用案例开发大全> <Android 3D游戏开发技术> <Android内核剖析 柯元旦> <深入理解Android  卷1> <深入理解Android

《DirectX 9.0 3D游戏开发编程基础》 第一章 初始化Direct3D 读书笔记

REF设备 参考光栅设备,他能以软件计算方式完全支持Direct3D Api.借助Ref设备,可以在代码中使用那些不为当前硬件所支持的特性,并对这此特性进行测试. D3DDEVTYPE 在程序代码中,HAL设备用值D3DDEVTYPE_HAL来表示.该值是一个枚举变量.REF设备用D3DDEVTYPE_REF来表示.这种类型非常重要,你需要铭记,因为在创建设备的时候,我们必须指定使用哪种设备类型. COM(组件对象模型) 创建COM接口时不可以使用c++关键字new.此外使用完接口,应调用Rel