U3D教程宝典之两步实现超实用的XML存档
转自:http://blog.sina.com.cn/s/blog_471132920101d3kh.html 两步实现超实用的XML存档 GameDataManager.cs的内容 //========================================================================================================= //Note:DataManaging. //DateCreated:2012/04/17by风宇冲 //DateModified:2012/12/14by风宇冲 //=========================================================================================================usingUnityEngine; usingSystem.Collections; usingSystem.IO; usingSystem.Collections.Generic; usingSystem; usingSystem.Text; usingSystem.Xml; usingSystem.Security.Cryptography; //GameData,储存数据的类,把需要储存的数据定义在GameData之内就行//publicclassGameData { //密钥,用于防止拷贝存档// publicstringkey; //下面是添加需要储存的内容// publicstringPlayerName; publicfloatMusicVolume; publicGameData() { PlayerName="Player"; MusicVolume=0.6f; } } //管理数据储存的类//publicclassGameDataManager:MonoBehaviour { privatestringdataFileName="tankyWarData.dat";//存档文件的名称,自己定// privateXmlSaverxs=newXmlSaver(); publicGameDatagameData; publicvoidAwake() { gameData=newGameData(); //设定密钥,根据具体平台设定// gameData.key=SystemInfo.deviceUniqueIdentifier; Load(); } //存档时调用的函数// publicvoidSave() { stringgameDataFile=GetDataPath()+"/"+dataFileName; stringdataString=xs.SerializeObject(gameData,typeof(GameData)); xs.CreateXML(gameDataFile,dataString); } //读档时调用的函数// publicvoidLoad() { stringgameDataFile=GetDataPath()+"/"+dataFileName; if(xs.hasFile(gameDataFile)) { stringdataString=xs.LoadXML(gameDataFile); GameDatagameDataFromXML=xs.DeserializeObject(dataString,typeof(GameData))asGameData; //是合法存档// if(gameDataFromXML.key==gameData.key) { gameData=gameDataFromXML; } //是非法拷贝存档// else { //留空:游戏启动后数据清零,存档后作弊档被自动覆盖//} } else { if(gameData!=null) Save(); } } //获取路径// privatestaticstringGetDataPath() { //Yourgamehasread+writeaccessto/var/mobile/Applications/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/Documents //Application.dataPathreturnsar/mobile/Applications/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/myappname.app/Data //Strip"/Data"frompath if(Application.platform==RuntimePlatform.IPhonePlayer) { stringpath=Application.dataPath.Substring(0,Application.dataPath.Length-5); //Stripapplicationname path=path.Substring(0,path.LastIndexOf('/')); returnpath+"/Documents"; } else //returnApplication.dataPath+"/Resources"; returnApplication.dataPath; } } XmlSaver.cs //========================================================================================================= //Note:XMLprocesscing,cannotsavemultiple-array!!! //DateCreated:2012/04/17by风宇冲 //DateModified:2012/04/19by风宇冲 //=========================================================================================================usingUnityEngine; usingSystem.Collections; usingSystem.Xml; usingSystem.Xml.Serialization; usingSystem.IO; usingSystem.Text; usingSystem.Security.Cryptography; usingSystem; publicclassXmlSaver { //内容加密 publicstringEncrypt(stringtoE) { //加密和解密采用相同的key,具体自己填,但是必须为32位// byte[]keyArray=UTF8Encoding.UTF8.GetBytes("12348578902223367877723456789012"); RijndaelManagedrDel=newRijndaelManaged(); rDel.Key=keyArray; rDel.Mode=CipherMode.ECB; rDel.Padding=PaddingMode.PKCS7; ICryptoTransformcTransform=rDel.CreateEncryptor(); byte[]toEncryptArray=UTF8Encoding.UTF8.GetBytes(toE); byte[]resultArray=cTransform.TransformFinalBlock(toEncryptArray,toEncryptArray.Length); returnConvert.ToBase64String(resultArray,resultArray.Length); } //内容解密 publicstringDecrypt(stringtoD) { //加密和解密采用相同的key,具体值自己填,但是必须为32位// byte[]keyArray=UTF8Encoding.UTF8.GetBytes("12348578902223367877723456789012"); RijndaelManagedrDel=newRijndaelManaged(); rDel.Key=keyArray; rDel.Mode=CipherMode.ECB; rDel.Padding=PaddingMode.PKCS7; ICryptoTransformcTransform=rDel.CreateDecryptor(); byte[]toEncryptArray=Convert.FromBase64String(toD); byte[]resultArray=cTransform.TransformFinalBlock(toEncryptArray,toEncryptArray.Length); returnUTF8Encoding.UTF8.GetString(resultArray); } publicstringSerializeObject(objectpObject,System.Typety) { stringXmlizedString=null; MemoryStreammemoryStream=newMemoryStream(); XmlSerializerxs=newXmlSerializer(ty); XmlTextWriterxmlTextWriter=newXmlTextWriter(memoryStream,Encoding.UTF8); xs.Serialize(xmlTextWriter,pObject); memoryStream=(MemoryStream)xmlTextWriter.BaseStream; XmlizedString=UTF8ByteArrayToString(memoryStream.ToArray()); returnXmlizedString; } publicobjectDeserializeObject(stringpXmlizedString,System.Typety) { XmlSerializerxs=newXmlSerializer(ty); MemoryStreammemoryStream=newMemoryStream(StringToUTF8ByteArray(pXmlizedString)); XmlTextWriterxmlTextWriter=newXmlTextWriter(memoryStream,Encoding.UTF8); returnxs.Deserialize(memoryStream); } //创建XML文件 publicvoidCreateXML(stringfileName,stringthisData) { stringxxx=Encrypt(thisData); StreamWriterwriter; writer=File.CreateText(fileName); writer.Write(xxx); writer.Close(); } //读取XML文件 publicstringLoadXML(stringfileName) { StreamReadersReader=File.OpenText(fileName); stringdataString=sReader.ReadToEnd(); sReader.Close(); stringxxx=Decrypt(dataString); returnxxx; } //判断是否存在文件 publicboolhasFile(StringfileName) { returnFile.Exists(fileName); } publicstringUTF8ByteArrayToString(byte[]characters) { UTF8Encodingencoding=newUTF8Encoding(); stringconstructedString=encoding.GetString(characters); return(constructedString); } publicbyte[]StringToUTF8ByteArray(StringpXmlString) { UTF8Encodingencoding=newUTF8Encoding(); byte[]byteArray=encoding.GetBytes(pXmlString); returnbyteArray; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- VideoIO Flash-based audio and video communication
- Hazelcast.xml 配置文件说明
- 单元测试 – 在代码写入之前是否应写入单元测试?
- 使用RadUpload控件上传大文件时出现如下bug,请大虾帮忙解决
- 10个和 Flash 一样的 HTML5 应用演示
- 二进制XML文件行#:错误膨胀类片段:仅在Android(6.0)-Mars
- c# – XmlElement.SelectNodes(..) – 什么也找不到..帮忙?
- 使用C#,如何以编程方式创建新的Visual Studio 2012解决方案
- ruby-on-rails – PG :: DependentObjectsStillExist:使用
- 如何应用JsonConfig解决There is a cycle in the hierarchy
- c#读取图像保存到数据库中(数据库保存图片)
- objective-c – 解析后在单独的类中的UITableVie
- swift – 在运行时更改SpriteNode PhysicsBody大
- Swift(三)基本运算符
- ruby-on-rails – Rails Twitter Bootstrap:导入
- flex 播放器 支持rtmp协议(也支持http协议)
- 无法加载oracle in oradb10g_home2 odbc驱动程序
- 寒風的cocos2dx之旅之UserDefault用法
- flex - java 数据传输
- objective-c – SKPaymentQueue finishTransacti