热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

http:blog.csdn.netpleasecallmewhyarticledetails8543181在Unity中的数据存储和iOS中字典的存储基本相同,是通过关键字实现数据存

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


创建一个Scene2.cs脚本:

 

 

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


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

 

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

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

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

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


推荐阅读
  • 本文详细介绍了Grand Central Dispatch (GCD) 的核心概念和使用方法,探讨了任务队列、同步与异步执行以及常见的死锁问题。通过具体示例和代码片段,帮助开发者更好地理解和应用GCD进行多线程开发。 ... [详细]
  • 在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ... [详细]
  • Struts与Spring框架的集成指南
    本文详细介绍了如何将Struts和Spring两个流行的Java Web开发框架进行整合,涵盖从环境配置到代码实现的具体步骤。 ... [详细]
  • 本文详细介绍如何在Linux系统中配置SSH密钥对,以实现从一台主机到另一台主机的无密码登录。内容涵盖密钥对生成、公钥分发及权限设置等关键步骤。 ... [详细]
  • 解决FCKeditor应用主题后上传问题及优化配置
    本文介绍了在Freetextbox收费后选择FCKeditor作为替代方案时遇到的上传问题及其解决方案。通过调整配置文件和调试工具,最终解决了上传失败的问题,并对相关配置进行了优化。 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • 丽江客栈选择问题
    本文介绍了一道经典的算法题,题目涉及在丽江河边的n家特色客栈中选择住宿方案。两位游客希望住在色调相同的两家客栈,并在晚上选择一家最低消费不超过p元的咖啡店小聚。我们将详细探讨如何计算满足条件的住宿方案总数。 ... [详细]
  • JSOI2010 蔬菜庆典:树结构中的无限大权值问题
    本文探讨了 JSOI2010 的蔬菜庆典问题,主要关注如何处理非根非叶子节点的无限大权值情况。通过分析根节点及其子树的特性,提出了有效的解决方案,并详细解释了算法的实现过程。 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • Ulysses Mac v29:革新文本编辑与写作体验
    探索Ulysses Mac v29,这款先进的纯文本编辑器为Mac用户带来了全新的写作和编辑环境。它不仅具备简洁直观的界面,还融合了Markdown等标记语言的最佳特性,支持多种格式导出,并提供强大的组织和同步功能。 ... [详细]
  • 本文详细介绍了流编辑器sed中的G、H、g、h命令,探讨了它们的工作原理及应用场景。通过实例解析和图解分析,帮助读者掌握这些高级命令的使用方法。 ... [详细]
  • 本文将详细介绍多个流行的 Android 视频处理开源框架,包括 ijkplayer、FFmpeg、Vitamio、ExoPlayer 等。每个框架都有其独特的优势和应用场景,帮助开发者更高效地进行视频处理和播放。 ... [详细]
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
  • HTML基础入门指南
    本文将深入浅出地介绍HTML的基础知识,包括其定义、开发工具、制定机构、特性、基本标签及更多实用内容。 ... [详细]
  • Python自动化测试入门:Selenium环境搭建
    本文详细介绍如何在Python环境中安装和配置Selenium,包括开发工具PyCharm的安装、Python环境的设置以及Selenium包的安装方法。此外,还提供了编写和运行第一个自动化测试脚本的步骤。 ... [详细]
author-avatar
小永远佳瞳_186
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有