【转】 [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游戏开发工具(六)
第十一章 制作炮台的旋转 大家知道,炮台需要向四周不同的角度发射炮弹,这就需要我们将炮台设置成为会旋转的物体,接下来我们就一起制作一个会旋转的炮台. 第一步:给炮台的炮筒添加旋转函数. 给炮台的炮筒部 ...
随机推荐
- IOS 设置子控件的frame(layoutSubviews and awakeFromNib)
如果控件是通过xib或者storyboard创建出来的就会调用该方法 - (void)awakeFromNib :该方法只会调用一次 // 如果控件是通过xib或者storyboard创建出来的就 ...
- UVALive 4731 Cellular Network(贪心,dp)
分析: 状态是一些有序的集合,这些集合互不相交,并集为所有区域.显然枚举集合元素是哪些是无法承受的, 写出期望的计算式,会发现,当每个集合的大小确定了以后,概率大的优先访问是最优的. 因此先对u从大到 ...
- POJ-2195 Going Home---KM算法求最小权值匹配(存负边)
题目链接: https://vjudge.net/problem/POJ-2195 题目大意: 给定一个N*M的地图,地图上有若干个man和house,且man与house的数量一致.man每移动一格 ...
- 【BZOJ2427】[HAOI2010] 软件安装(缩点+树形DP)
点此看题面 大致题意: 有\(N\)个软件,每个软件有至多一个依赖以及一个所占空间大小\(W_i\),只有当一个软件的直接依赖和所有的间接依赖都安装了,它才能正常工作并造成\(V_i\)的价值.求在容 ...
- 二叉搜索树(BST)学习笔记
简介 二叉搜索树(\(Binary\ Search\ Tree\)),简称\(BST\),用于在一个集合中查找元素. 性质 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 若它的右子树不为 ...
- Web前端学习流程
- Jquery动态添加多行,返回数据至每一行中
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="sys_channel_ed ...
- 【WordPress】CentOS 6.10 测试WP发送邮件失败
1.错误信息如下: SMTP -> ERROR: Failed to connect to server: Permission denied (13) 2.解决方法: https://gist ...
- Linux下面自动清理超过指定大小的文件
Linux下面自动清理超过指定大小的文件 思路:1)查找test目录下的所有的文件2)判断是否大于100M3)大于100M则清空 以byte为单位显示文件大小,然后和100M大小做对比. 100M换算 ...
- python笔记-tuple元组的方法
#!/usr/bin/env python #-*- coding:utf-8 -*- # 创建空元组 tuple1 = () print(tuple) # 创建带有元素的元组 # 元组中的类型可以不 ...