Unity3D 场景切换与持久化简单数据储存(PlayerPrefs类)
2013-12-18 16:09
633 查看
持久化简单的数据储存在Unity3D 中提供了一个简单有效的方法,如果之前的你做过Android的开发你会发现在Unity3D中持久化数据的储存和Android非常的想象。那么下面MOMO 将用一个简单有效的例子向大家介绍Unity3D中持久化数据。
首先我们须要熟悉一下Unity3D中的PlayerPrefs这个类。这个类中一共帮助我们封装了9个方法,用来数据的储存与读取。
举一个例子
view source
我们发现它是以键值对的形式进行储存与读取,每一个Key对应一个Value,储存过后通过Key可以得到之前储存的Value。这里说一下GetString()方法中的第二个参数, 它代表默认值。意思是如果通过第一个参数的Key没有找到对应的Value的话GetString()方法就会返回我们写的第二个参数的默认值。怎么样?很简单吧~ 感觉和Android完全一样哈。
Unity3D默认的字体的 size 只有 16 ,这就意味了放在iPhone4 (960 X 640)上 字体会显示的非常小。字体的来源有很多,大家可以在互联网上下载,或者从自己的电脑中拷贝,在Mac电脑下字体放在 Finder -> 资源库 -> Fonts
![](http://www.xuanyusong.com/wp-content/uploads/2012/05/a11.png)
我们可以看见电脑中存在了很多字体,我这里随便选一个,将 华文仿宋.ttf 用鼠标拖动到Project中。
选中: 华文仿宋
FontSize 30 :毫无疑问是字体的大小,这里写30让字体几乎放大1倍。
Character: 设置字体的文字编码 Unicode ASCLL 编码
Style:设置字体的风格,粗体 斜体
![](http://www.xuanyusong.com/wp-content/uploads/2012/05/b11.png)
点击Cretae ->GUISkin 创建一个GUI的皮肤,将 华文仿宋 拖动到箭头所指向的方向。发现下面存在很多GUI皮肤相关控件设置的,可以在这里设置每一个高级控件~大家可以手动的修改一下看看效果哈。
![](http://www.xuanyusong.com/wp-content/uploads/2012/05/c9.png)
游戏场景在游戏制作中是一个非常重要的部分,因为任何一款游戏都是由若干的场景组成,Unity3D的游戏场景做的非常贴心。
创建2个游戏场景,一个是scene0 一个是scene1 ,本章的目标是在第一个游戏场景中保存一些基本游戏数据,然后切换到第二个场景中显示第一个场景中保存的数据,实现场景的切换已经数据的储存。
在scene0中创建一个c# 脚本名称为Scene0Main.cs 将它绑定在摄像头中。
Scene0Main.cs
view source
Scene1Main.cs
view source
File -> Build Settings 点击Add Current添加场景,这一步很重要,如果不添加的话在代码中切换场景会抛异常,盆友们还得注意一下~
![](http://www.xuanyusong.com/wp-content/uploads/2012/05/d6.png)
build and run 导出运行项目,如下图所示我分别输入string int float 三种类型的数据,然后点击commit all ,将所有数据全部保存下来,游戏场景切换到scene1场景中。
![](http://www.xuanyusong.com/wp-content/uploads/2012/05/e4.png)
切换到scene1中可以正常的显示scene0中储存的数值,点击clean all 将清空储存的所有信息后返回场景scene0,点击only return 直接返回场景scene0。
![](http://www.xuanyusong.com/wp-content/uploads/2012/05/f3.png)
另外两个重要的方法
view source
持久化简单的数据储存在Unity3D 中提供了一个简单有效的方法,如果之前的你做过Android的开发你会发现在Unity3D中持久化数据的储存和Android非常的想象。那么下面MOMO 将用一个简单有效的例子向大家介绍Unity3D中持久化数据。
首先我们须要熟悉一下Unity3D中的PlayerPrefs这个类。这个类中一共帮助我们封装了9个方法,用来数据的储存与读取。
举一个例子
view source
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
![](http://www.xuanyusong.com/wp-content/uploads/2012/05/a11.png)
我们可以看见电脑中存在了很多字体,我这里随便选一个,将 华文仿宋.ttf 用鼠标拖动到Project中。
选中: 华文仿宋
FontSize 30 :毫无疑问是字体的大小,这里写30让字体几乎放大1倍。
Character: 设置字体的文字编码 Unicode ASCLL 编码
Style:设置字体的风格,粗体 斜体
![](http://www.xuanyusong.com/wp-content/uploads/2012/05/b11.png)
点击Cretae ->GUISkin 创建一个GUI的皮肤,将 华文仿宋 拖动到箭头所指向的方向。发现下面存在很多GUI皮肤相关控件设置的,可以在这里设置每一个高级控件~大家可以手动的修改一下看看效果哈。
![](http://www.xuanyusong.com/wp-content/uploads/2012/05/c9.png)
游戏场景在游戏制作中是一个非常重要的部分,因为任何一款游戏都是由若干的场景组成,Unity3D的游戏场景做的非常贴心。
创建2个游戏场景,一个是scene0 一个是scene1 ,本章的目标是在第一个游戏场景中保存一些基本游戏数据,然后切换到第二个场景中显示第一个场景中保存的数据,实现场景的切换已经数据的储存。
在scene0中创建一个c# 脚本名称为Scene0Main.cs 将它绑定在摄像头中。
Scene0Main.cs
view source
01 | using UnityEngine; |
02 | using System.Collections; |
03 |
04 | public class Scene0Main : MonoBehaviour { |
05 |
06 | //储存数据的显示 |
07 | public string testStr; |
08 | public string testInt; |
09 | 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 | void OnGUI() { |
32 |
33 | //将GUI的皮肤设置为我们创建的皮肤 |
34 | GUI.skin = fontSkin; |
35 |
36 | //贴上图片 |
37 | GUI.DrawTexture( new Rect((Screen.width - Imagetexture.width) >>1, 10, 120, 120), Imagetexture); |
38 |
39 | //添加输入框让用户输入信息,这里面我没有捕获异常,因为用户有可能输入一个不合法的数值 |
40 | testStr = GUI.TextField ( new Rect(10, 200, 200, 50), testStr, 50); |
41 | testInt = GUI.TextField ( new Rect(10, 250, 200, 50), testInt, 50); |
42 | testFloat = GUI.TextField ( new Rect(10, 300, 200, 50), testFloat, 50); |
43 |
44 | //点击按钮保存所有数据 |
45 | if (GUI.Button( new Rect(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 | } |
view source
01 | using UnityEngine; |
02 | using System.Collections; |
03 |
04 | public class scene1Main : MonoBehaviour { |
05 |
06 | public string testStr; |
07 | public string testInt; |
08 | public string testFloat; |
09 |
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 | void OnGUI() { |
22 | GUI.skin = fontSkin; |
23 |
24 | GUI.DrawTexture( new Rect((Screen.width - Imagetexture.width) >>1, 10, 120, 120), Imagetexture); |
25 |
26 | //显示label |
27 | GUI.Label( new Rect(10,150,300,50), "testStr = " + testStr); |
28 | GUI.Label( new Rect(10,200,300,50), "testInt = " + testInt); |
29 | GUI.Label( new Rect(10,250,300,50), "testFloat = " + testFloat); |
30 |
31 | if (GUI.Button( new Rect(220, 200, 150, 100), "clean all" )) |
32 | { |
33 | //删除所有键值 |
34 | PlayerPrefs.DeleteAll(); |
35 | // 返回场景0 |
36 | Application.LoadLevel( "scene0" ); |
37 | } |
38 |
39 | if (GUI.Button( new Rect(220, 320, 150, 100), "only return" )) |
40 | { |
41 | // 返回场景0 |
42 | Application.LoadLevel( "scene0" ); |
43 | } |
44 | } |
45 | } |
![](http://www.xuanyusong.com/wp-content/uploads/2012/05/d6.png)
build and run 导出运行项目,如下图所示我分别输入string int float 三种类型的数据,然后点击commit all ,将所有数据全部保存下来,游戏场景切换到scene1场景中。
![](http://www.xuanyusong.com/wp-content/uploads/2012/05/e4.png)
切换到scene1中可以正常的显示scene0中储存的数值,点击clean all 将清空储存的所有信息后返回场景scene0,点击only return 直接返回场景scene0。
![](http://www.xuanyusong.com/wp-content/uploads/2012/05/f3.png)
另外两个重要的方法
view source
1 | //删除 PlayerPrefs 中某一个key的值 |
2 | PlayerPrefs. DeleteKey (“key”); |
3 |
4 | //判断 PlayerPrefs中是否存在这个key |
5 | bool b = PlayerPrefs.HasKey(“key”); |
相关文章推荐
- Unity3D 游戏引擎之游戏场景的切换与持久化简单数据的储存
- Unity3D 游戏引擎之游戏场景的切换与持久化简单数据的储存【转】
- Unity3D 游戏引擎之游戏场景的切换与持久化简单数据的储存
- Unity3D 游戏引擎之游戏场景的切换与持久化简单数据的储存(十四)
- Unity3D 游戏引擎之游戏场景的切换与持久化简单数据的储存
- Unity3D 游戏引擎之游戏场景的切换与持久化简单数据的储存(十四)
- Unity3D研究院之游戏场景的切换与持久化简单数据的储存(十四)
- Unity3D研究院之游戏场景的切换与持久化简单数据的储存(十四)
- Unity3D研究院之游戏场景的切换与持久化简单数据的储存
- 【Unity3D】场景切换持久化数据之 场景主题
- [Unity3D]手机3D游戏开发:场景切换与数据存储(PlayerPrefs 类的介绍与使用)
- [Unity3D]无缝场景切换解决方案(1) - 简单场景切换
- 【转载】[Unity3D]场景间切换与数据传递(以及物体删除技巧)
- [Unity3D]无缝场景切换解决方案(1) - 简单场景切换
- [Unity3D]场景间切换与数据传递(以及物体删除技巧)
- Unity3D无缝场景切换解决方案 - 简单场景切换
- [Unity3D]场景间切换与数据传递(以及物体删除技巧)
- [Unity3D]无缝场景切换解决方案(1) - 简单场景切换
- unity3d中切换场景和简单数据持久化存储
- [Unity3D]场景间切换与数据传递(以及物体删除技巧)