Unity3D 游戏引擎之游戏场景的切换与持久化简单数据的储存
雨松MOMO原创文章如转载,请注明:转载至我的独立域名博客雨松MOMO程序研究院,原文地址:http://www.xuanyusong.com/archives/542
持久化简单的数据储存在Unity3D 中提供了一个简单有效的方法,如果之前的你做过Android的开发你会发现在Unity3D中持久化数据的储存和Android非常的想象。那么下面MOMO 将用一个简单有效的例子向大家介绍Unity3D中持久化数据。
首先我们须要熟悉一下Unity3D中的PlayerPrefs这个类。这个类中一共帮助我们封装了9个方法,用来数据的储存与读取。
举一个例子
PlayerPrefs.SetString("key", "value");
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
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");
}
}
}
Scene1Main.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");
}
}
}
File -> Build Settings 点击Add Current添加场景,这一步很重要,如果不添加的话在代码中切换场景会抛异常,盆友们还得注意一下~
build and run 导出运行项目,如下图所示我分别输入string int float 三种类型的数据,然后点击commit all ,将所有数据全部保存下来,游戏场景切换到scene1场景中。
切换到scene1中可以正常的显示scene0中储存的数值,点击clean all 将清空储存的所有信息后返回场景scene0,点击only return 直接返回场景scene0。
另外两个重要的方法
//删除 PlayerPrefs 中某一个key的值
PlayerPrefs. DeleteKey (“key”);
//判断 PlayerPrefs中是否存在这个key
bool b = PlayerPrefs.HasKey(“key”);
最后欢迎各位盆友可以和MOMO一起讨论Unity3D游戏开发,总的来说这一章还是比较简单的,哇咔咔~~~ 附上Unity3D工程的下载地址,Xcode项目我就不上传了,须要的自己导出。
下载地址:http://www.xuanyusong.com/archives/542
分享到:
相关推荐
雨松MOMO Unity3D 游戏开发系列博文之Unity3D 游戏引擎之游戏场景的切换与持久化简单数据的储存,欢迎大家下载阅读,哇咔咔~~
Unity3D之游戏场景的切换与持久化简单数据的储存,Unity最新的场景切换形式,以及实现PlayerPrefs数据的保存与读取。
小编今天研究了在Unity3D中的数据持久化问题。数据持久化在任何一个开发领域都是一个值得关注的问题,小到一个应用中配置文件的读写,大到数据库的管理维护,都可以看到数据持久化的身影。小编在《C#基于Linq和反射...
unity 移动端持久化保存数据demo,有一个简单的数据加密功能, 在demo场景里有个案例
ios 数据存储,数据持久化,包含Preference 、文件存储、归档、数据库 、 CoreData的使用
Unity3D/2D游戏开发从0到1分实战项目篇与开发理论篇。其中,开发理论篇,从初学者容易入门的角度分为上部分(1~14章)与下部分(15~29章)。上部分内容包括游戏历史与Unity发展概述、Unity界面与3D模型入门、Unity...
《Unity 3D游戏开发》通过实例详细介绍了如何使用Unity进行游戏开发,书中先简要介绍了Unity...然后介绍了持久化数据、音频与视频播放等内容,最后以一款第一人称射击类游戏为原型,向读者详细介绍游戏制作的整个过程。
图灵原创 宣雨松 著 《Unity3D游戏开发》通过实例详细介绍了如何使用Unity 进行游戏开发,书...然后介绍了持久化数据、音频与视频播放等内容,最后以一款第一人称射击类游戏为原型,向读者详细介绍游戏制作的整个过程。
主要介绍了React通过redux-persist持久化数据存储的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
sentinel-mysql规则持久化,持久化规则数据至mysql,包含数据表结构,配置文件,jar,一键启动
clj的国家集训队论文,关于可持久化数据结构(主席树)
Android数据持久化,SharedPreferences 、内部存储、外部存储、数据库简单使用
数据持久化就是指将那些内存中的瞬时数据保存到持久化设备中(如手机文件、数据库等),当关机,停电后,数据不丢失。 Android 系统中主要提供了三种方式用于实现数据持久化功能,分别是: 1、文件存储 2、...
iOS中有五种持久化数据的方式:属性列表、对象归档、NSUserDefaults、SQLite3和Core Data。 本文介绍对象归档来持久化数据。归档的作用就是将对象以文件的形式保存到磁盘中,以使得数据序列化和持久化。 使用归档的...
wxapp-store 是一个微信小程序本地数据持久化存储库
.NET对象序列化与数据持久化.NET对象序列化与数据持久化.NET对象序列化与数据持久化.NET对象序列化与数据持久化.NET对象序列化与数据持久化.NET对象序列化与数据持久化(Q群号:152088818 本群只为有经验的.NET开发者...
Android 系统提供了三种方式来实现数据持久化,即文件存储、SharedPreference 存储、数据库存储。本文主要介绍数据库存储方式,即 Android 内置的 SQLite 数据库。