本篇文章主要介绍了"Unity3D 场景切换与持久化简单数据储存(PlayerPrefs类)",主要涉及到Unity3D 场景切换与持久化简单数据储存(PlayerPrefs类)方面的内容,对于Unity3D 场景切换与持久化简单数据储存(PlayerPrefs类)感兴趣的同学可以参考一下。

 

持久化简单的数据储存在Unity3D 中提供了一个简单有效的方法,如果之前的你做过Android的开发你会发现在Unity3D中持久化数据的储存和Android非常的想象。那么下面MOMO 将用一个简单有效的例子向大家介绍Unity3D中持久化数据。

首先我们须要熟悉一下Unity3D中的PlayerPrefs这个类。这个类中一共帮助我们封装了9个方法,用来数据的储存与读取。

举一个例子

1 PlayerPrefs.SetString("key","value");
2 string str = PlayerPrefs.GetString("key","defaule"));

我们发现它是以键值对的形式进行储存与读取,每一个Key对应一个Value,储存过后通过Key可以得到之前储存的Value。这里说一下GetString()方法中的第二个参数, 它代表默认值。意思是如果通过第一个参数的Key没有找到对应的Value的话GetString()方法就会返回我们写的第二个参数的默认值。怎么样?很简单吧~ 感觉和Android完全一样哈。

 

Unity3D默认的字体的 size 只有 16 ,这就意味了放在iPhone4 (960 X 640)上 字体会显示的非常小。字体的来源有很多,大家可以在互联网上下载,或者从自己的电脑中拷贝,在Mac电脑下字体放在 Finder -> 资源库 -> Fonts


我们可以看见电脑中存在了很多字体,我这里随便选一个,将 华文仿宋.ttf 用鼠标拖动到Project中。

 

选中: 华文仿宋

FontSize 30 :毫无疑问是字体的大小,这里写30让字体几乎放大1倍。

Character:  设置字体的文字编码 Unicode  ASCLL 编码

Style:设置字体的风格,粗体 斜体

点击Cretae ->GUISkin 创建一个GUI的皮肤,将 华文仿宋 拖动到箭头所指向的方向。发现下面存在很多GUI皮肤相关控件设置的,可以在这里设置每一个高级控件~大家可以手动的修改一下看看效果哈。

游戏场景在游戏制作中是一个非常重要的部分,因为任何一款游戏都是由若干的场景组成,Unity3D的游戏场景做的非常贴心。

创建2个游戏场景,一个是scene0 一个是scene1 ,本章的目标是在第一个游戏场景中保存一些基本游戏数据,然后切换到第二个场景中显示第一个场景中保存的数据,实现场景的切换已经数据的储存。

在scene0中创建一个c# 脚本名称为Scene0Main.cs 将它绑定在摄像头中。

Scene0Main.cs

01 using UnityEngine;
02 using System.Collections;
03
04 public class Scene0Main : MonoBehaviour {
05
06 //储存数据的显示
07 publicstring testStr;
08 publicstring testInt;
09 publicstring testFloat;
10
11 //GUI皮肤 为上面我们添加的皮肤
12 //在外面用鼠标拖动上为它赋值
13 publicGUISkin fontSkin;
14 //显示的图片
15 publicTexture Imagetexture;
16
17 // Use this for initialization
18 voidStart () {
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 voidUpdate () {
28
29 }
30
31 voidOnGUI() {
32
33 //将GUI的皮肤设置为我们创建的皮肤
34 GUI.skin = fontSkin;
35
36 //贴上图片
37 GUI.DrawTexture(newRect((Screen.width - Imagetexture.width) >>1, 10, 120, 120), Imagetexture);
38
39 //添加输入框让用户输入信息,这里面我没有捕获异常,因为用户有可能输入一个不合法的数值
40 testStr = GUI.TextField (newRect(10, 200, 200, 50), testStr, 50);
41 testInt = GUI.TextField (newRect(10, 250, 200, 50), testInt, 50);
42 testFloat = GUI.TextField (newRect(10, 300, 200, 50), testFloat, 50);
43
44 //点击按钮保存所有数据
45 if(GUI.Button(newRect(220, 200, 150, 100), "commit all"))
46 {
47
48 PlayerPrefs.SetString("testStr", testStr);
49 PlayerPrefs.SetInt("testInt",int.Parse(testInt));
50 PlayerPrefs.SetFloat("testFloat",float.Parse(testFloat));
51 //切换场景到scene1
52 Application.LoadLevel("scene1");
53 }
54 }
55
56 }

Scene1Main.cs

01 using UnityEngine;
02 using System.Collections;
03
04 public class scene1Main : MonoBehaviour {
05
06 publicstring testStr;
07 publicstring testInt;
08 publicstring testFloat;
09
10 publicGUISkin fontSkin;
11 publicTexture Imagetexture;
12
13 // Use this for initialization
14 voidStart () {
15 testStr = PlayerPrefs.GetString("testStr","default");
16 testInt = PlayerPrefs.GetInt("testInt", 0).ToString();
17 testFloat = PlayerPrefs.GetFloat("testFloat", 0).ToString();
18
19 }
20
21 voidOnGUI() {
22 GUI.skin = fontSkin;
23
24 GUI.DrawTexture(newRect((Screen.width - Imagetexture.width) >>1, 10, 120, 120), Imagetexture);
25
26 //显示label
27 GUI.Label(newRect(10,150,300,50),"testStr = "+ testStr);
28 GUI.Label(newRect(10,200,300,50),"testInt = "+ testInt);
29 GUI.Label(newRect(10,250,300,50),"testFloat = "+ testFloat);
30
31 if(GUI.Button(newRect(220, 200, 150, 100), "clean all"))
32 {
33 //删除所有键值
34 PlayerPrefs.DeleteAll();
35 // 返回场景0
36 Application.LoadLevel("scene0");
37 }
38
39 if(GUI.Button(newRect(220, 320, 150, 100), "only return"))
40 {
41 // 返回场景0
42 Application.LoadLevel("scene0");
43 }
44 }
45 }

File -> Build Settings 点击Add Current添加场景,这一步很重要,如果不添加的话在代码中切换场景会抛异常,盆友们还得注意一下~

build and run 导出运行项目,如下图所示我分别输入string int float 三种类型的数据,然后点击commit all ,将所有数据全部保存下来,游戏场景切换到scene1场景中。

切换到scene1中可以正常的显示scene0中储存的数值,点击clean all 将清空储存的所有信息后返回场景scene0,点击only return 直接返回场景scene0。

另外两个重要的方法

1 //删除 PlayerPrefs 中某一个key的值
2 PlayerPrefs. DeleteKey (“key”);
3
4 //判断 PlayerPrefs中是否存在这个key
5 bool b = PlayerPrefs.HasKey(“key”);

【转】Unity3D 场景切换与持久化简单数据储存(PlayerPrefs类)的更多相关文章

  1. 【Unity3D】Unity3D之 注册表动态存取游戏存档——PlayerPrefs类

    [Unity3D]Unity3D之 注册表动态存取游戏存档--PlayerPrefs类 1.Unity3D提供了一个用于本地持久化保存与读取的类--PlayerPrefs.工作原理非常简单,以键值对的 ...

  2. Unity3D 场景切换加载进度条实现

    需要三个场景,场景A,场景B,场景C: 场景A:一个按钮,点击加载场景B: 场景B:从A切换到C过度场景,加载进度条: 场景C:目标场景: 创建OnProgress.cs脚本: using Syste ...

  3. ue4 简单数据储存

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

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

  5. cocos2dx3.1从零学习(二)菜单、场景切换、场景传值

    转:http://www.it165.net/pro/html/201406/16195.html 回顾一下上一篇的内容,我们已经学会了创建一个新的场景scene,添加sprite和label到层中, ...

  6. Android 里的数据储存

    数据持久化 关于数据储存,这个话题已经被反复讨论过很多次了,我是不建议把网络存储这种方式纳入到数据储存的范围的,因为这个和Android没多少关系,因此就有如下的分类: 本地储存(也称之为数据持久化, ...

  7. [Unity3D]场景间切换与数据传递(以及物体删除技巧)

    http://blog.163.com/kingmax_res/blog/static/77282442201031712216508/ 先介绍一些基本函数(具体用法自己查文档):---------- ...

  8. Unity3D教程:无缝地形场景切换的解决方法

    http://www.unitymanual.com/6718.html 当我们开发一个大型项目的时候-会遇到这样的问题(地形场景的切换)这个只是字面意思-并不是重场景1的100  100 100坐标 ...

  9. Unity3D笔记十九 持久化数据

    1.PlayerPrefs类(生命周期???) 1.1 保存与读取数据 在C#中类似缓存.Cookie.Session等保存数据的,但是有点区别的是在C#中如果在取值时没有取到默认值则返回值是NULL ...

随机推荐

  1. MYSQL短索引

    优化MYSQL时,可以尽量使用短索引,如果只是为了提高读取的速度,可以优先使用聚合索引,把几个字段聚集在一起,当然缺点在于操作(写)的时候会降低效率,短索引一般都是开头几个字符基本不同的时候,可以考虑 ...

  2. 【UVA10652】Board Wrapping(求凸包面积)

    点此看题面 大致题意: 告诉你若干个矩形的重心坐标.长.宽和相对\(y\)轴的偏转角度,求矩形面积和与能围住这些矩形的最小凸包面积之比. 矩形面积和 这应该是比较好求的吧. 已经给了你长和宽,直接乘起 ...

  3. cuda流测试=basic_single_stream

    cuda流测试 /* * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. * * NVIDIA Corporation and ...

  4. Oracle grant connect, resource to user语句中的权限

    博主在 Oracle 11g r2上测试(测试日期:2017.10.30): 用sys登陆到oracle中,执行以下两条语句: select * from role_sys_privs WHERE R ...

  5. Oracle小技巧_不同表空间不同用户导入导出数据dmp

    [博主注:数据库方面 ITPUB网站及博客内容非常丰富]   转载来源ITPUB 博客 经常有人会问:原来的数据在USERS表空间里面,我想把它IMP进APP表空间,我已经修改了目的用户的默认表空间, ...

  6. 螺旋矩阵,两步进阶,从暴力到o(1)

    题目描述 一个 n 行 n 列的螺旋矩阵可由如下方法生成: 从矩阵的左上角(第 1 行第 1 列)出发,初始时向右移动:如果前方是未曾经过的格子,则继续前进,否则右转:重复上述操作直至经过矩阵中所有格 ...

  7. git与github账号建立SSH连接

    第1步:创建SSH Key.在用户主目录下,(就是在你的工作空间一层)看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步 ...

  8. 洛谷 P1346 电车

    这道题的关键在建图 把每一个车站看成一个点,将这个车站相连的第一个车站建立一条边权为0的边,对于它所相连的其他车站,建立边权为1的边: 这样我们可以得到一张图: 起点,终点都知道了,跑一边最短路即可 ...

  9. Expect自动化交互程序

    Expect介绍: 1.什么是Expect Expect是一个用来实现自动化交互功能的软件套件,基于TCL的脚本编程工具语言,方便学习,功能强大. 2.为什么要使用expcet: 当今的企业运维中,自 ...

  10. 基于 Generator 和 Iterator 的惰性列表

    初识 Lazy List 如果有了解过 Haskell 的朋友,对下面的这些表达一定不陌生 repeat 1 -- => [1, 1, 1, 1, 1,...] cycle "abc& ...