纳金网
标题: 数据保存和读取 [打印本页]
作者: may 时间: 2016-8-29 21:12
标题: 数据保存和读取
所有的游戏开发都离不开数据存储的操作,[color=rgb(85, 85, 85) !important]unity3d也不例外,下面向大家介绍一下Unity3D相关的数据存储方法。
PlayerPrefs是Unity系统自带的一种最简单的存储方式,以plist键值对方式存放,pc存放在注册表中,ios存放在plist中,而android存放在data文件夹/中。
PlayerPrefs类支持3中数据类型的保存和读取,浮点型,整形,和字符串型。
分别对应的函数为:
SetInt();保存整型数据;
GetInt();读取整形数据;
SetFloat();保存浮点型数据;
GetFlost();读取浮点型数据;
SetString();保存字符串型数据;
GetString();读取字符串型数据;
这些函数的用法基本一致使用Set进行保存,使用Get进行读取。
因为 PlayerPrefs是已键值对的形式存储数据,我们在读写的过程都需要指定
一个键 对应一个值 ,所以如果有多个数据需要保存就会产生大量的代码,本人
在最近开发中写了一个小工具通过封装来解决多条数据保存,不到之处希望大家指出
代码如下:
- using UnityEngine;
- using System;
- using System.Reflection;
- /// <summary>
- /// 数据保存
- /// </summary>
- public static class PlayerPrefsExtend
- {
- /// <summary>
- /// 保存
- /// </summary>
- /// <param name="name"></param>
- /// <param name="o"></param>
- public static void Save(string name, object o)
- {
- Type t = o.GetType();
- FieldInfo[] fiedls = t.GetFields();
- for (int i = 0; i < fiedls.Length; i++)
- {
- string saveName = name + "." + 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;
- }
- }
- }
- /// <summary>
- /// 读取
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="name"></param>
- /// <returns></returns>
- public static T GetValue<T>(string name) where T : new()
- {
- T newObj = new T();
- Type t = newObj.GetType();
- FieldInfo[] fiedls = t.GetFields();
- for (int i = 0; i < fiedls.Length; i++)
- {
- string saveName = name + "." + 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;
- }
- }
复制代码
作者: Tomleung 时间: 2016-8-29 21:35
那請問如何應用? 有例子嗎?
欢迎光临 纳金网 (http://rs.narkii.com/club/) |
Powered by Discuz! X2.5 |