博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity PlayerPrefs类进行扩展(整个对象进行保存)
阅读量:4328 次
发布时间:2019-06-06

本文共 2546 字,大约阅读时间需要 8 分钟。

盘子脸在制作单机游戏的时候,先以为没有好多数据需要保存本地. 就没有使用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
(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
("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);

效果图:

转载于:https://www.cnblogs.com/plateFace/p/5170544.html

你可能感兴趣的文章
POJ 3267 The Cow Lexicon(动态规划)
查看>>
设计原理+设计模式
查看>>
音视频处理
查看>>
tomcat 7服务器跨域问题解决
查看>>
前台实现ajax 需注意的地方
查看>>
Jenkins安装配置
查看>>
个人工作总结05(第二阶段)
查看>>
Java clone() 浅拷贝 深拷贝
查看>>
深入理解Java虚拟机&运行时数据区
查看>>
02-环境搭建
查看>>
spring第二冲刺阶段第七天
查看>>
搜索框键盘抬起事件2
查看>>
阿里百川SDK初始化失败 错误码是203
查看>>
透析Java本质-谁创建了对象,this是什么
查看>>
BFS和DFS的java实现
查看>>
第四次博客作业
查看>>
C++ GUID和string转化函数【转载】
查看>>
save与persist差别
查看>>
采用传输矩阵法求解光子晶体带隙
查看>>
nginx 生产中配置记录
查看>>