Unity PlayerPrefs类进行扩展(整个对象进行保存)

盘子脸在制作单机游戏的时候,先以为没有好多数据需要保存本地. 就没有使用json等格式自己进行保存. 使用PlayerPrefs类,但是后面字段越来越多的时候.

PlayerPrefs保存就发现要手动写很多代码. 于是是否可以写一个辅助方法自动帮我保存一个对象,取出一个对象呢?

代码如何下:

public static class PlayerPrefsExtend
{
    public static void Save(string objectName,LocalEntityBase o)
    {
        Type t = o.GetType();
        FieldInfo [] fiedls =  t.GetFields();
        for (int i = 0; i < fiedls.Length; i++)
        {
            string saveName = objectName + "." + o.Identification + "." + fiedls[i].Name;
            switch (fiedls[i].FieldType.Name)
            {
                case "String":
                    PlayerPrefs.SetString(saveName, fiedls[i].GetValue(o).ToString());
                    break;
                case "Int32":
                case "Int64":
                case "Int":
                case "uInt":
                    PlayerPrefs.SetInt(saveName, (int)fiedls[i].GetValue(o));
                    break;
                case "Float":
                    PlayerPrefs.SetFloat(saveName, (float)fiedls[i].GetValue(o));
                    break;
            }
        }
    }

    public static T GetValue<T>(string objectName) where T : LocalEntityBase, new()
    {
        T newObj = new T();

        Type t = newObj.GetType();
        FieldInfo[] fiedls = t.GetFields();
        for (int i = 0; i < fiedls.Length; i++)
        {
            string saveName = objectName + "." + newObj.Identification + "." + fiedls[i].Name;
            switch (fiedls[i].FieldType.Name)
            {
                case "String":
                    fiedls[i].SetValue(newObj,PlayerPrefs.GetString(saveName));
                    break;
                case "Int32":
                case "Int64":
                case "Int":
                case "uInt":
                    fiedls[i].SetValue(newObj, PlayerPrefs.GetInt(saveName));
                    break;
                case "Float":
                    fiedls[i].SetValue(newObj,PlayerPrefs.GetFloat(saveName));
                    break;
            }
        }

        return newObj;
    }
}

操作代码 :

PlayerPrefs.DeleteAll();

User user = new User();
user.Name = "盘子脸";
user.Age = 10;
user.Describe = "码农=。= ";
PlayerPrefsExtend.Save("ID1", user);

user = null;

user = PlayerPrefsExtend.GetValue<User>("ID1");

Debug.Log("user name: " + user.Name);
Debug.Log("user Age: " + user.Age);
Debug.Log("user Describe: " + user.Describe);

//以前的写法,就要手动写很多key.
//PlayerPrefs.SetString("Name", user.Name);
//PlayerPrefs.SetInt("Age", user.Age);
//PlayerPrefs.GetString("Describe", user.Describe);

效果图:

时间: 2024-10-23 07:16:18

Unity PlayerPrefs类进行扩展(整个对象进行保存)的相关文章

【转】Unity 游戏存档 PlayerPrefs类的用法

http://www.cnblogs.com/qiaogaojian/p/5969855.html unity3d提供了一个用于本地持久化保存与读取的类--PlayerPrefs.工作原理非常简单,以键值对的形式将数据保存在文件中,然后程序可以根据这个名称取出上次保存的数值.    PlayerPrefs类支持3中数据类型的保存和读取,浮点型,整形,和字符串型.    分别对应的函数为:    SetInt();保存整型数据:    GetInt();读取整形数据:    SetFloat();

【Unity3D】Unity3D之 注册表动态存取游戏存档——PlayerPrefs类

1.Unity3D提供了一个用于本地持久化保存与读取的类--PlayerPrefs.工作原理非常简单,以键值对的形式将数据保存在文件中,然后程序可以根据这个名称取出上次保存的数值. 2.PlayerPrefs类支持3中数据类型的保存和读取,浮点型,整形,和字符串型.    分别对应的函数为:    SetInt();保存整型数据:    GetInt();读取整形数据: SetFloat();保存浮点型数据:    GetFlost();读取浮点型数据: SetString();保存字符串型数据

Swift中的结构体,类,协议,扩展和闭包的用法以及? 和 !的区别

// MARK: - 1.结构体 //1.声明一个结构体 struct Rect {    // 声明结构体变量的属性(存储属性)    var x:Float    var y:Float    var width:Float    var height:Float    // 声明结构体属性,要使用static    static var description:String?        // 声明一个计算属性(是用来专门计算结构体变量属性的setter,和getter方法,其本身没有存

【Unity 3D】学习笔记二十八:unity工具类

unity为开发者提供了很多方便开发的工具,他们都是由系统封装的一些功能和方法.比如说:实现时间的time类,获取随机数的Random.Range( )方法等等. 时间类 time类,主要用来获取当前的系统时间. using UnityEngine; using System.Collections; public class Script_04_13 : MonoBehaviour { void OnGUI() { GUILayout.Label("当前游戏时间:" + Time.t

JavaScript学习总结(十四)——JavaScript编写类的扩展方法

在?J?a?v?a?S?c?r?i?p?t?中?可以使?用?类的p?r?o?t?o?t?y?p?e属性来?扩?展?类的属?性?和?方?法,在实际开发当中,当JavaScript内置的那些类所提供的动态方法和动态属性不满足我们实际开发时,我们就可以通过"prototype"属性给自定义类添加方法和属性或者扩展原有的类中的方法和属性. 一.扩展JavaScript内置类,添加动态方法 语法格式: 类名.prototype.方法名 = function([param1],[param2],.

Java程序员的JavaScript学习笔记(10—— jQuery-在“类”层面扩展)

计划按如下顺序完成这篇笔记: 1.    理念. 2.    属性复制和继承. 3.    this/call/apply. 4.    闭包/getter/setter. 5.    prototype. 6.    面向对象模拟. 7.    jQuery基本机制. 8.    jQuery选择器. 9.    jQuery工具方法. 10.    jQuery-在"类"层面扩展. 11.    jQuery-在"对象"层面扩展. 12.    jQuery-扩

类的扩展(Extension , NSData, NSDateFormatter, Category, Extension, Protocol, delegate)

类的扩展         OC数据类型         1.NSInteger, NSUInteger         2.CGFloat         3.NSString, NSMutableString         4.NSArray, NSMutableString         5.NSNumber         6.NSDictionary, NSMutableDictionary         7.NSSet, NSMutableSet              NSD

【转】 [Unity3D]手机3D游戏开发:场景切换与数据存储(PlayerPrefs 类的介绍与使用)

http://blog.csdn.net/pleasecallmewhy/article/details/8543181 在Unity中的数据存储和iOS中字典的存储基本相同,是通过关键字实现数据存储与调用. 下面来介绍一下Unity用来存储数据的PlayerPrefs 类. 使用PlayerPrefs可以在在游戏会话中保持并访问玩家偏好设置. 在Mac OS X上PlayerPrefs存储在-/Library/PlayerPrefs文件夹, 名文unity/[companyname]\[pro

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

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