关于 Unity3D 持久化数据存储的笔记 之 PlayerPrefs

持久化数据存储这个话题,无论在iOS、安卓都会经常见到的,更何况是跨平台的Unity。

首先我们说说最简单数据存储的方式吧。

1.PlayerPrefs类

在iOS 里面我们常用一种简单的方式存储读取简单的数据,就是通过 NSUserDefaults类来获取数据、读取数据。

而安卓处也有类似的方式进行存储、获取数据。

当然我们要学习的Unity 也有类似的方式进行存储、获取数据。


下面我就用iOS 来讲解一下。

iOS 的数据存储是:

[[NSUserDefaults standardUserDefaults]setObject:@"我是木子才!" forKey:@"name"];

而读取数据则是:

NSString *content = [[NSUserDefaultsstandardUserDefaults]objectForKey:@"name"];

就是这么简单,所以很多人都很随意的往里面保存数据,我汗~~~

当然封装一下更为方便,简单,快捷。


然后,我们来看看 Unity 是怎么来搞的吧。

数据存储是:

PlayerPrefs.SetString("name""我是木子才!");

而读取数据则是:

string m_info = PlayerPrefs.GetString("name");


其实这样看上去也是挺简单的,使用方式都是差不多啊,安卓也是类似的,不过安卓的更加强大一点。


/*****************我是动人的分割线****************/


好了,现在我们来看看 PlayerPrefs 这个类吧。


PlayerPrefs 可以保存、读取3种基本的数据类型,分别是整型、浮点型和字符串。方法如下:

public static function SetInt(key: string, value: int): void;          ->      保存整型数据

public static function SetFloat(key: string, value: float): void;          ->      保存浮点型数据

public static function SetString(key: string, value: string): void;          ->      保存字符串数据


public static function GetInt(key: string, defaultValue: int = 0): int;          ->      读取整型数据

public static function GetFloat(key: string, defaultValue: float = 0.0F): float;          ->      读取浮点型数据

public static function GetString(key: string, defaultValue: string = ""): string;         ->      读取字符串数据


使用方式,请自行参考上面的示范。很简单的。

Set保存的时候需要两个参数来确定,第一个是键,第二个是值。

Get读取的时候需要一个参数来确定,那就是键。


官方文档上还有几个方法。我们来看看吧~~

public static function DeleteAll(): void;          ->      删除全部键内容、值内容,简称清空数据。

public static function DeleteKey(key: string): void;          ->      删除指定的键,和它所对应的值。

public static function HasKey(key: string): bool;          ->      判断指定的键是否存在,存在则返回真值 true。


/*****************广告招租~~~****************/


现在来实践一下吧。

首先来个代码吧,假如看不懂代码的话,可以看看关于 Unity3D 网络请求的笔记 这个文章。

代码如下:


using UnityEngine;
using System.Collections;

public class testScript : MonoBehaviour {
	string m_info = "Nothing";

	void OnGUI() {
		GUI.BeginGroup(new Rect(Screen.width * 0.5f - 100, Screen.height * 0.5f - 100, 500, 200), "");

		GUI.Label(new Rect(0, 10, 200, 30), m_info);
		GUI.skin.label.alignment = TextAnchor.MiddleCenter;

		if (GUI.Button(new Rect(25, 50, 150, 30), "写入数据")) {
			PlayerPrefs.SetString("name", "我是木子才!");
		}

		if (GUI.Button(new Rect(25, 100, 150, 30), "读取数据")) {
			m_info = PlayerPrefs.GetString("name");
		}

		if (GUI.Button(new Rect(0, 150, 200, 30), "将显示Label设置为Nothing")) {
			m_info = "Nothing";
		}

		GUI.EndGroup();
	}

	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
	
	}
}

完成之后你会看到这个界面的,当你把代码敲完之后运行也是这个效果的,duang~~~

技术分享


点了写入数据的按钮后,是没有变化的~~~

然后,再点击一下读取数据,你就会看到效果了,duang~~~~

技术分享


当你点击第三个按钮的话,会变成第一张图片的效果,然后你就再点击读取数据的按钮再次看见效果。

随意玩弄吧。


之后,当你退出了,进入的时候,点击读取数据的按钮,也会看见效果~~~~duang~~~~

这次就这样吧~~~谢谢大家了~~~



作者:木子才
iOS开发者俱乐部  232099237  有空可以加入这里一起探讨问题,由于群小,请输入验证信息。验证信息是objective-C代码、或其他语言代码。


文章来自:http://blog.csdn.net/iamyococo/article/details/44239809
© 2021 jiaocheng.bubufx.com  联系我们
ICP备案:鲁ICP备09046678号-3