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

  • 相关阅读:
    网站被刷导致404解决
    vim常用
    curl, wget常用选项
    使用paramiko远程登录并执行命令脚本
    批量监测dns是否可用脚本,不可用时并切换
    shell脚本收集服务器基本信息并入库
    沃通SSL证书及国密SSL证书入驻百度云市场
    电子合同,相比纸质合同有哪些好处?
    DV型域名https证书的优点及申请流程
    Chrome 浏览器显示“网站连接不安全”,是什么原因?
  • 原文地址:https://www.cnblogs.com/plateFace/p/5170544.html
Copyright © 2011-2022 走看看