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

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


推荐阅读
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 本文介绍了在Java中gt、gtgt、gtgtgt和lt之间的区别。通过解释符号的含义和使用例子,帮助读者理解这些符号在二进制表示和移位操作中的作用。同时,文章还提到了负数的补码表示和移位操作的限制。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
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社区 版权所有