zoukankan      html  css  js  c++  java
  • 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);

    效果图:

    image

  • 相关阅读:
    web工作流管理系统开发之三 可视化流程设计器
    做统计报表常用的设计思路
    一个请求从 URL 字符串到 HTML 代码的“漫长曲折”之路
    webparts中,此页当前禁用指定的显示模式。请确保为当前用户启用了个性化设置。
    一个多线程应用的最佳示例
    web工作流管理系统开发之一 工作流概念
    在线报表采集汇总系统的需求
    几种web报表打印方案的比较
    web报表开发技术专题五:Excel的阴影
    中国报表漫谈
  • 原文地址:https://www.cnblogs.com/plateFace/p/5170544.html
Copyright © 2011-2022 走看看