中持久化数据的储存和Android非常的想象。那么下面MOMO 将用一个简单有效的例子向大家介绍Unity3D据。 出自狗刨学习网
首先我们须要熟悉一下Unity3D中的PlayerPrefs这个类。这个类中一共帮助我们封装了9个方法,用来与读取。
举一个例子
1. 2.
PlayerPrefs.SetString(\"key\
string str = PlayerPrefs.GetString(\"key\
复制代码
我们发现它是以键值对的形式进行储存与读取,每一个Key对应一个Value,储存过后通过Key可以得到
Value。这里说一下GetString()方法中的第二个参数, 它代表默认值。意思是如果通过第一个参数的Key没有
Value的话GetString()方法就会返回我们写的第二个参数的默认值。怎么样?很简单吧~ 感觉和Android完全
Unity3D默认的字体的 size 只有 16 ,这就意味了放在iPhone4 (960 X 640)上 字体会显示的非常小
有很多,大家可以在互联网上下载,或者从自己的电脑中拷贝,在Mac电脑下字体放在 Finder -> 资源库 ->
我们可以看见电脑中存在了很多字体,我这里随便选一个,将 华文仿宋.ttf 用鼠标拖动到Project中。
选中: 华文仿宋
FontSize 30 :毫无疑问是字体的大小,这里写30让字体几乎放大1倍。
Character: 设置字体的文字编码 Unicode ASCLL 编码
Style:设置字体的风格,粗体 斜体
点击Cretae ->GUISkin 创建一个GUI的皮肤,将 华文仿宋 拖动到箭头所指向的方向。发现下面存在很相关控件设置的,可以在这里设置每一个高级控件~
游戏场景在游戏制作中是一个非常重要的部分,因为任何一款游戏都是由若干的场景组成,Unity3D的游非常贴心。
创建2个游戏场景,一个是scene0 一个是scene1 ,本章的目标是在第一个游戏场景中保存一些基本游后切换到第二个场景中显示第一个场景中保存的数据,实现场景的切换已经数据的储存。
在scene0中创建一个c# 脚本名称为Scene0Main.cs 将它绑定在摄像头中。
Scene0Main.cs
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34.
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\ testInt = PlayerPrefs.GetInt(\"testInt\ testFloat = PlayerPrefs.GetFloat(\"testFloat\ }
// Update is called once per frame void Update () { }
void OnGUI() {
//将GUI的皮肤设置为我们创建的皮肤 GUI.skin = fontSkin;
35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56.
//贴上图片
GUI.DrawTexture(new Rect((Screen.width - Imagetexture.width) >>1, 10,
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\
PlayerPrefs.SetInt(\"testInt\
PlayerPrefs.SetFloat(\"testFloat\ //切换场景到scene1
Application.LoadLevel(\"scene1\"); } } }
复制代码
Scene1Main.cs
1. 2. 3. 4. 5. 6.
using UnityEngine;
using System.Collections;
public class scene1Main : MonoBehaviour {
public string testStr;
7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41.
public string testInt; public string testFloat;
public GUISkin fontSkin; public Texture Imagetexture;
// Use this for initialization void Start () {
testStr = PlayerPrefs.GetString(\"testStr\ testInt = PlayerPrefs.GetInt(\"testInt\ testFloat = PlayerPrefs.GetFloat(\"testFloat\ }
void OnGUI() {
GUI.skin = fontSkin;
GUI.DrawTexture(new Rect((Screen.width - Imagetexture.width) >>1, 10,
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
42. 43. 44. 45.
Application.LoadLevel(\"scene0\"); } } }
复制代码
File -> Build Settings 点击Add Current添加场景,这一步很重要,如果不添加的话在代码中切换场景友们还得注意一下~
build and run 导出运行项目,如下图所示我分别输入string int float 三种类型的数据,然后点击com所有数据全部保存下来,游戏场景切换到scene1场景中。
换到scene1中可以正常的显示scene0中储存的数值,点击clean all 将清空储存的所有信息后返回场景击only return 直接返回场景scene0。
1. 2. 3. 4. 5.
//删除 PlayerPrefs 中某一个key的值 PlayerPrefs. DeleteKey (“key”);
//判断 PlayerPrefs中是否存在这个key bool b = PlayerPrefs.HasKey(“key”);
复制代码
最后欢迎各位盆友可以和MOMO一起讨论unity3d游戏开发,总的来说这一章还是比较简单的,哇咔咔Unity3D工程的下载地址,Xcode项目我就不上传了,须要的自己导出。
因篇幅问题不能全部显示,请点此查看更多更全内容