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内置的那些类所提供的动态 ...
随机推荐
- css中的段落样式及背景
一.段落样式 css中关于段落的样式主要有行高,缩进,段落对齐,文字间距,文字溢出,段落换行等.它们的具体语法如下: line-height : normal | length text-indent ...
- ServletRequest中getReader()和getInputStream()只能调用一次的解决办法(转)
原文地址:http://liwx2000.iteye.com/blog/1542431 原文作者:liwx2000 为了提高项目安全性,拦截非法访问,要给项目增加了一个过滤器,拦截所有的请求,校验是否 ...
- android studio 开发android app 真机调试
大家都知道开发android app 的时候可以有2种调试方式, 一种是Android Virtual Device(虚拟模拟器) ,另一种就是真机调试. 这里要说的是真机调试的一些安装步骤: 1. ...
- vsftp虚拟用户登录配置详解
一.安装:1.安装Vsftpd服务:# yum install vsftpd 2.安装DB4部件包:这里要特别安装一个db4的包,用来支持文件数据库.# yum install db4-utils 二 ...
- java开发之基础篇2
一.java开发环境的搭建 下载和安装jdk.版本自己看着办! 1 JAVA_HOME C:\Program Files\Java\jdk1.7.0_25 2 path C:\Program File ...
- c# 鼠标操作
1#region 3using System; 4using System.Runtime.InteropServices; 6#endregion 8namespace Windows.Forms. ...
- compass模块
Compass核心模块Reset :重置CSS模块 @import "compass/reset" Layout :页面布局的控制能力 @import "compass/ ...
- asp.net mvc4 远程验证
[HttpGet] public ActionResult CheckToolsIdExists(string ToolsID) { using (BaseContext context = new ...
- uva 10061 How many zero's and how many digits ?
How many zeros and how many digits? Input: standard input Output: standard output Given a decimal in ...
- 我的django之旅(三)数据库和模型
我的django之旅(三)模型和数据库 标签(空格分隔):模型 数据库 ORM 1.django ORM django内置了一套完整的解决方案,其中就包括他自己的ORM.可惜没有使用SQLAlchem ...