Unity3D 游戏引擎之游戏场景切换与持久化简单数据储存

移动开发 iOS 游戏开发
持久化简单的数据储存在Unity3D 中提供了一个简单有效的方法,如果之前的你做过Android的开发你会发现在Unity3D中持久化数据的储存和Android非常的想象。

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

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

举一个例子

[代码]c#/cpp/oc代码:

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

[代码]c#/cpp/oc代码:

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        
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 }

Scene1Main.cs

[代码]c#/cpp/oc代码:

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        
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 }

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

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

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

 

另外两个重要的方法

[代码]c#/cpp/oc代码:

1 //删除 PlayerPrefs 中某一个key的值 
2 PlayerPrefs. DeleteKey (“key”); 
3    
4 //判断 PlayerPrefs中是否存在这个key 
5 bool b = PlayerPrefs.HasKey(“key”);
责任编辑:冰凝儿
相关推荐

2012-12-24 08:46:50

iOSUnity3D

2012-12-24 08:40:12

2012-12-24 08:52:44

iOSUnity3D

2012-12-24 08:48:25

iOSUnity3D

2012-12-24 08:50:21

iOSUnity3D

2012-12-24 09:04:04

iOSUnity3D

2012-12-24 09:01:41

iOSUnity3D

2012-12-24 08:57:35

iOSUnity3D

2012-12-24 09:07:09

iOSUnity3D

2012-12-24 08:51:23

iOSUnity3D

2012-12-24 08:59:13

iOSUnity3D

2012-12-24 08:45:19

iOSUnity3D

2012-12-24 08:56:15

iOSUnity3D

2012-12-24 08:54:47

iOSUnity3D

2012-12-24 09:06:14

iOSUnity3D

2012-12-24 09:11:58

iOSUnity3D

2012-12-24 09:00:31

iOSUnity3D

2012-12-24 09:17:12

iOSUnity3D

2013-06-25 09:16:10

Unity3D
点赞
收藏

51CTO技术栈公众号