关于 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代码、或其他语言代码。

时间: 2024-11-05 15:58:14

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

【Unity3D游戏开发】—— PlayerPrefs类实现本地持久化数据存储

在很多游戏中都会有"存储进度","读取进度"等菜单,或者当我们进入下一个场景时有些数据需要带入下一个场景.这就需要数据储存.Unity中提供了一个用于本地持久化保存于读取数据的类--PlayerPrefs. 它是以键值对的形式将数据保存在文件中. 下面来看看PlayerPrefs的简单用法.. //得到存储的数据 Grade = PlayerPrefs.GetFloat("mGrade", 0.0f).ToString(); //获取浮点型 Ag

React通过redux-persist持久化数据存储

在React项目中,我们经常会通过redux以及react-redux来存储和管理全局数据.但是通过redux存储全局数据时,会有这么一个问题,如果用户刷新了网页,那么我们通过redux存储的全局数据就会被全部清空,比如登录信息等. 这个时候,我们就会有全局数据持久化存储的需求.首先我们想到的就是localStorage,localStorage是没有时间限制的数据存储,我们可以通过它来实现数据的持久化存储. 但是在我们已经使用redux来管理和存储全局数据的基础上,再去使用localStora

CoreData 持久化数据存储的注意点

CoreData 是iOS3.0之后实现数据持久化存储的一种重要手段.下面是整理的一些注意点: 要使用CoreData对数据进行操作,首先需要写数据管理器的取值函数(来自AppDelegate) CoreData的实体创建不能用alloc,而需要用NSEntityDescription CoreData每次操作之后需要同步,也就是save 增 NSEntityDescription: 的方法: + (id)insertNewObjectForEntityForName:(NSString *)e

ios 持久化数据存储方式

1.plist文件存储 每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离.应用必须待在自己的沙盒里,其他应用不能访问该沙盒 应用沙盒的文件系统目录,如下图所示(假设应用的名称叫Layer) 模拟器应用沙盒的根路径在: (apple是用户名, 6.0是模拟器版本) /Users/apple/Library/Application Support/iPhone Simulator/6.0/Applications Document 保存应用运行时生成的需要持久化的数据

unity3d 本地数据存储

using UnityEngine; using System.Collections; //路径工具类 public class PathKit { /** 后缀常量字符 */ public const string SUFFIX = ".txt"; const string PREFIX="file://"; const string FORMAT=".unity3d"; public static string RESROOT=Applic

阅读郭林《第一行代码》的笔记——第6章 数据存储全方案,详解持久化技术

瞬时数据是指那些存储在内存当中,有可能会因为程序关闭或其他原因导致内存被回收而丢失的数据.这对于一些关键性的数据信息来说是绝对不能容忍的,谁都不希望自己刚发出去的一条微博,刷新一下就没了吧.那么怎样才能保证让一些关键性的数据不会丢失呢?这就需要用到数据持久化技术了. 持久化技术简介 数据持久化就是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑关机的情况下,这些数据仍然不会丢失.保存在内存中的数据是处于瞬时状态的,而保存在存储设备中的数据是处于持久状态的,持久化技术则是提供了一种机

第一行代码读书笔记——数据存储全方案,持久化技术

三种方式简单实现数据持久化功能 文件存储 简介 将数据存储到文件中 从文件中读取数据 扩展StringStringBuilderStringBuffer SharePreferences存储 注意点 获取SharePreferences对象的三种方式 Context类中的 getSharedPreferences方法 Activity类中的 getPreferences方法 PreferenceManager类中的 getDefaultSharedPreferences方法 向SharedPre

Android基础知识(6)—数据持久化之数据存储

阅读前,请浏览此处上方目录. Android基础知识(6)-数据持久化之数据存储 本章内容为个人笔记,参考书籍有:<疯狂的android>第3版.<第一行代码> 首先,我们要知道什么是数据持久化. 数据持久化就是指那些内存中的瞬时数据保存到存储设备中,保证即使手机在关机的情况下,这些数据不会丢失.保存在内存中的数据是处于瞬时状态,保存在存储设备中的数据是处于持久状态.持久化技术则是提供了一种机制可以让数据在瞬时状态和持久状态之间进行转换. Android系统主要提供了三种方式用于简

iOS 学习笔记——0005(数据存储)

先发一个练手的小demo,自己写的简略通讯录,已上传至github https://github.com/liaoshaolim/addressBook 1.NSKeyedArchiver:(归档) 这里用一个添加联系人的例子来说明: 注意:归档形式保存数据,需要该对象遵守NSCoding协议,而且对应的必须提供encodeWithCoder和initWithCoder方法 因为归档是一次性的,解压也是一次性的,所以小量的ok,如果量大的话,改一个小地方就要归档或解压全部,效率会比较低 //用一