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

  • 相关阅读:
    使用wps跨ubuntu和windows编辑“.doc”文档。报错“编辑受限”,乱码,软件卡死,强制关闭
    【Python】断言功能Assertion
    【Python】hasattr() getattr() setattr() 使用方法详解
    【python】self & cls
    【Python】2.x与3​​.x版本的选用&版本间的区别
    【python】 del 的用法
    【python】参数中的*args和**kwargs
    解方程AX=b与矩阵分解:奇异值分解 特征值分解 QR分解 三角分解 Cholesky分解
    【python】dist-packages和site-packages的区别
    【python】脚本连续发送QQ邮件
  • 原文地址:https://www.cnblogs.com/plateFace/p/5170544.html
Copyright © 2011-2022 走看看