热门标签 | 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:

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


推荐阅读
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • Commit1ced2a7433ea8937a1b260ea65d708f32ca7c95eintroduceda+Clonetraitboundtom ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
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社区 版权所有