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);
效果图:

Unity PlayerPrefs类进行扩展(整个对象进行保存)的更多相关文章
- Unity 游戏存档 PlayerPrefs类的用法
unity3d提供了一个用于本地持久化保存与读取的类--PlayerPrefs.工作原理非常简单,以键值对的形式将数据保存在文件中,然后程序可以根据这个名称取出上次保存的数值. PlayerPr ...
- 【转】Unity 游戏存档 PlayerPrefs类的用法
http://www.cnblogs.com/qiaogaojian/p/5969855.html unity3d提供了一个用于本地持久化保存与读取的类——PlayerPrefs.工作原理非常简单,以 ...
- 【Unity3D】Unity3D之 注册表动态存取游戏存档——PlayerPrefs类
[Unity3D]Unity3D之 注册表动态存取游戏存档--PlayerPrefs类 1.Unity3D提供了一个用于本地持久化保存与读取的类--PlayerPrefs.工作原理非常简单,以键值对的 ...
- Unity中对系统类进行扩展的方法
Unity扩展系统类,整合简化代码 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- ...
- Util应用程序框架公共操作类(三):数据类型转换公共操作类(扩展篇)
上一篇以TDD方式介绍了数据类型转换公共操作类的开发,并提供了单元测试和实现代码,本文将演示通过扩展方法来增强公共操作类,以便调用时更加简化. 下面以字符串转换为List<Guid>为例进 ...
- iOS学习之Object-C语言类的扩展
一.Category 1.Category:也叫分类,类目.是为没有源代码的类扩充功能.扩充的功能会成为原有类的一部分,可以通过原有类或者原有的对象直接调用,并且可继承. 2.注意 ...
- python基础学习Day15 面向对象、类名称空间、对象名称空间 (2)
一.类 先看一段代码: class Person: animal = '高级动物' walk_way = '直立行走' # 静态属性,静态变量,静态字段 language = '语言' def __i ...
- 本版本延续MVC中的统一验证机制~续的这篇文章,本篇主要是对验证基类的扩展和改善(转)
本版本延续MVC中的统一验证机制~续的这篇文章,本篇主要是对验证基类的扩展和改善 namespace Web.Mvc.Extensions { #region 验证基类 /// <summary ...
- JavaScript学习总结(十四)——JavaScript编写类的扩展方法
在JavaScript中可以使用类的prototype属性来扩展类的属性和方法,在实际开发当中,当JavaScript内置的那些类所提供的动态 ...
随机推荐
- PyInstaller打包Python脚本为exe
1.PyInstaller-3.1.1 百度云链接 http://pan.baidu.com/s/1jHYWin8 密码 oapl 2.安装最新版本的 pywin32-217.win32-py2 ...
- 【公告】CSDN个人空间将于2014年4月20日全新改版上线
尊敬的用户: 你们好! CSDN个人空间将在2014年4月20日全新改版上线! CSDN个人空间是2008年8月推出的服务,致力于给广大用户提供在线技术分享和资料 ...
- JavaScript 函数基础
1. JavaScript 函数基础 1. 定义方法 2. 函数的调用方法 3. 函数方法 apply : 将函数作为数组的方法来调用 将参数以数组形式传递给该方法 call : 将函数作为对象的 ...
- Eclipse下绿色安装插件Aptana、Swing
本文主要针对Ecplise下绿色安装插件,写本篇博客也是因为笔者在Ecplise下安装Aptana时不断安装出现错误,所以写下自己安装成功以及之前出错的原因,也搜集了许多资料在此一并总结一下吧! Ec ...
- F# 天生就是就异步和并行的料
做模型开发免不了要使用异步和并行计算,尤其在多核CPU的今天,更是如此,F#恰逢其时,天生就具备这种能力,先看一个例子. open System open System.Drawing open Sy ...
- edmx文件
MethodBase 提供有关方法的信息 在System.Reflector命名空间之下 edmx edmx:Runtime节点下包含与EF有关的定义与映射信息 edmx:ConceptualMode ...
- Angular源代码学习笔记-原创
时间:2014年12月15日 14:15:10 /** * @license AngularJS v1.3.0-beta.15 * (c) 2010-2014 Google, Inc. http:// ...
- 18 java 代理模式 (转)
静态代理 1.新建一个接口,这个接口所提供的方法是关于数据库操作的 public interface EmployeeDao { public void updateSalary(); } 2.建一个 ...
- BZOJ 1001 狼抓兔子 (网络流最小割/平面图的对偶图的最短路)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 算法讨论: 1.可以用最大流做,最大流等于最小割. 2.可以把这个图转化其对偶图,然 ...
- C#将十六进制的文本转换到整型数据
1 length1 = Int32.Parse(szLine.Substring(1, 2), System.Globalization.NumberStyles.HexNumber);//计算这一行 ...