原文地址:http://blog.csdn.net/dingkun520wy/article/details/49386507

(一)简单数据存储PlayerPrefs

这种存储方法比较简单直接上代码

//简单数据存储
public void SimpleLocalStorage()
{
//存储信息
PlayerPrefs.SetString("TestString", "存储");
PlayerPrefs.SetInt("TestInt", 8);
PlayerPrefs.SetFloat("TestFloat", 8.8F);
//获取信息
PlayerPrefs.GetString("TestString");
PlayerPrefs.GetInt("TestInt");
PlayerPrefs.GetFloat("TestFloat"); //判断是否有信息
if (PlayerPrefs.HasKey("TestString"))
{
//删除信息
PlayerPrefs.DeleteKey("TestString");
PlayerPrefs.DeleteKey("TestInt");
PlayerPrefs.DeleteKey("TestFloat");
}
//删除所有
PlayerPrefs.DeleteAll();
}

(二)Xml数据存储

首先是定义数据对象和Xml格式字符串相互转换的函数

/// 数据对象转换xml字符串
public string SerializeObject(object pObject, System.Type ty)
{
string XmlizedString = null;
MemoryStream memoryStream = new MemoryStream();
XmlSerializer xs = new XmlSerializer(ty);
XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
xs.Serialize(xmlTextWriter, pObject);
memoryStream = (MemoryStream)xmlTextWriter.BaseStream;
XmlizedString = UTF8ByteArrayToString(memoryStream.ToArray());
return XmlizedString;
} /// xml字符串转换数据对象
public object DeserializeObject(string pXmlizedString, System.Type ty)
{
XmlSerializer xs = new XmlSerializer(ty);
MemoryStream memoryStream = new MemoryStream(StringToUTF8ByteArray(pXmlizedString));
XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
return xs.Deserialize(memoryStream);
}
//UTF8字节数组转字符串
public string UTF8ByteArrayToString(byte[] characters)
{
UTF8Encoding encoding = new UTF8Encoding();
string constructedString = encoding.GetString(characters);
return (constructedString);
} //字符串转UTF8字节数组
public byte[] StringToUTF8ByteArray(String pXmlString)
{
UTF8Encoding encoding = new UTF8Encoding();
byte[] byteArray = encoding.GetBytes(pXmlString);
return byteArray;
}

然后定义读取和存储文本文件的函数,这里用到了Base64的加密方法

/// 创建文本文件
public void CreateTextFile(string fileName, string strFileData, bool isEncryption)
{
StreamWriter writer; //写文件流
string strWriteFileData;
if (isEncryption)
{
strWriteFileData = Encrypt(strFileData); //是否加密处理
}
else
{
strWriteFileData = strFileData; //写入的文件数据
} writer = File.CreateText(fileName);
writer.Write(strWriteFileData);
writer.Close(); //关闭文件流
} /// 读取文本文件
public string LoadTextFile(string fileName, bool isEncryption)
{
StreamReader sReader; //读文件流
string dataString; //读出的数据字符串 sReader = File.OpenText(fileName);
dataString = sReader.ReadToEnd();
sReader.Close(); //关闭读文件流 if (isEncryption)
{
return Decrypt(dataString); //是否解密处理
}
else
{
return dataString;
} }
/// 加密方法
/// 描述: 加密和解密采用相同的key,具体值自己填,但是必须为32位
public string Encrypt(string toE)
{
byte[] keyArray = UTF8Encoding.UTF8.GetBytes("12348578902223367877723456789012");
RijndaelManaged rDel = new RijndaelManaged();
rDel.Key = keyArray;
rDel.Mode = CipherMode.ECB;
rDel.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = rDel.CreateEncryptor();
byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toE);
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); return Convert.ToBase64String(resultArray, 0, resultArray.Length);
} /// 解密方法
/// 描述: 加密和解密采用相同的key,具体值自己填,但是必须为32位
public string Decrypt(string toD)
{
byte[] keyArray = UTF8Encoding.UTF8.GetBytes("12348578902223367877723456789012");
RijndaelManaged rDel = new RijndaelManaged();
rDel.Key = keyArray;
rDel.Mode = CipherMode.ECB;
rDel.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = rDel.CreateDecryptor();
byte[] toEncryptArray = Convert.FromBase64String(toD);
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); return UTF8Encoding.UTF8.GetString(resultArray);
}

定义数据对象

public class UserData
{
public string userName; //用户名
public int onlyId; //用户唯一id public UserData()
{ }
}

函数的用法

//xml数据存储和读取
public void XmlLocalStorage()
{
string _fileName = Application.persistentDataPath + "/UnityUserData"; UserData user = new UserData();
user.userName = "乐逍遥";
user.onlyId = 1;
//存储数据
string s = SerializeObject(user, typeof(UserData));
//创建XML文件且写入数据
CreateTextFile(_fileName, s,false); //读取数据
try
{
string strTemp = LoadTextFile(_fileName,false);
//反序列化对象
UserData userD = DeserializeObject(strTemp, typeof(UserData)) as UserData; }
catch
{
Debug.Log("系统读取XML出现错误,请检查");
}
}

Unity3d本地存储的更多相关文章

  1. 基于本地存储的kvm虚拟机在线迁移

    基于本地存储的kvm虚拟机在线迁移 kvm虚拟机迁移分为4种(1)热迁移基于共享存储(2)热迁移基于本地存储(3)冷迁移基于共享存储(4)冷迁移基于本地存储 这里介绍的是基于本地存储的热迁移 动态块迁 ...

  2. HTML5 localStorage本地存储

    介绍 localStorage(本地存储)的使用方式.包括对存储对象的添加.修改.删除.事件触发等操作. 目录 1. 介绍 1.1 说明 1.2 特点 1.3 浏览器最小版本支持 1.4 适合场景 2 ...

  3. HTML5笔记:跨域通讯、多线程、本地存储和多图片上传技术

    最近做项目在前端我使用了很多新技术,这些技术有bootstrap.angularjs,不过最让我兴奋的还是使用了HTML5的技术,今天我想总结一些HTML5的技术,好记性不如烂笔头,写写文章可以很好的 ...

  4. HTML5 学习总结(三)——本地存储

    一.HTML4客户端存储 B/S架构的应用大量的信息存储在服务器端,客户端通过请求响应的方式从服务器获得数据,这样集中存储也会给服务器带来相应的压力,有些数据可以直接存储在客户端,传统的Web技术中会 ...

  5. Javascript本地存储小结

    前言 总括:详细讲述Cookie,LocalStorge,SesstionStorge的区别和用法. 人生如画,岁月如歌. 原文博客地址:Javascript本地存储小结 知乎专栏&& ...

  6. H5 本地存储一

    localStorage(本地存储),可以长期存储数据,没有时间限制,一天,一年,两年甚至更长,数据都可以使用.sessionStorage(会话存储),只有在浏览器被关闭之前使用,创建另一个页面时同 ...

  7. 初识html5的localStorage本地存储

    一.概述 HTML5 提供了两种在客户端存储数据的新方法: localStorage - 没有时间限制的数据存储 sessionStorage - 针对一个 session 的数据存储 之前,这些都是 ...

  8. IndexedDB(本地存储)

    var students = [{ id: 1001, name: "Byron", age: 24 }, { id: 1002, name: "Frank", ...

  9. 关于HTML5本地缓存技术LocalStorage 本地存储 和 SessionStorage

    如果你想在用户访问的时候记录或者记住他们的行为,你会想到的是什么,cookie 和session.但今天告诉你还有两种或者说是1种吧 那就是html5的 LocalStorage 本地存储和 Sess ...

随机推荐

  1. [改善Java代码]推荐覆写toString方法

    建议49: 推荐覆写toString方法 为什么要覆写toString方法,这个问题很简单,因为Java提供的默认toString方法不友好,打印出来看不懂,不覆写不行,看这样一段代码: public ...

  2. (转)9个offer,12家公司,35场面试,从微软到谷歌,应届计算机毕业生的2012求职之路

    原文:http://www.cnblogs.com/figure9/archive/2013/01/09/2853649.html 1,简介 毕业答辩搞定,总算可以闲一段时间,把这段求职经历写出来,也 ...

  3. # li鼠标移入移出,点击,变背景色,变checkbox选中状态

    移入移出背景色改变和点击背景色改变,两者是否相互覆盖? 若移出背景色恢复,影响点击事件的背景色改变,会产生效果为: 点击时,背景色改变,并且checkbox选中 鼠标移开后,checkbox仍选中,但 ...

  4. 归约函数reduce&映射数组map(笔记)

    function forEach(array,action){ ;i<array.length;i++) action(array[i]); } function reduce(combine, ...

  5. HDOJ2004成绩转换

    成绩转换 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  6. Android中SurfaceView的使用详解

    Android中SurfaceView的使用详解 http://blog.csdn.net/listening_music/article/details/6860786 Android NDK开发 ...

  7. 第四十三篇、利用NSProxy解决NSTimer内存泄漏问题

    问题描述: 用NSTimer来实现每隔一定时间执行制定的任务,例如最常见的广告轮播图.如果我们在 timerWithTimeInterval:1 target:self 中指定target为当前控制器 ...

  8. java filter的一些理解

    java filter即  java中的过滤器: 一. * web项目中只有三个组件 * 过滤器filter  ↓    级 别 * 监听器            ↓   级 别 * servlet  ...

  9. ZStack之ZDApp_Init解析

    [注:本文源自博客园http://www.cnblogs.com/cherishui/,为尊重劳动者成果,如需转载请保留此行] 以下代码分析基于ZStack-CC2530-2.5.1a,开发环境为 I ...

  10. CSDN 自动评论

    转载说明 本篇文章可能已经更新,最新文章请转:http://www.sollyu.com/csdn-auto-reviews/ 说明 当打开http://download.csdn.net/my/do ...