unity3d里的XML读写示例

关于U3D里面XML读写办法,谢谢刘老师的指导(刘国栋)

代码:

/*
*Project name:
*    
*Author:
*    
*Version:
*    
*Description:
*    
*/

using UnityEngine;
using System.Collections;
using System.Xml;
using System.Xml.Serialization;
using System.IO;
using System.Text;
using System.Security.Cryptography;
using System;
public class XmlSaver
{

private static XmlSaver _Instance = null;
    public static XmlSaver GetInstance()
    {
        if (_Instance == null)
        {
            _Instance = new XmlSaver();
        }
        return _Instance;
    }
    //内容加密
    public string Encrypt(string toE)
    {
        //加密和解密采用相同的key,具体自己填,但是必须为32位//
        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);
    }
    
    //内容解密
    public string Decrypt(string toD)
    {
        //加密和解密采用相同的key,具体值自己填,但是必须为32位//
        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 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;
    }
    
    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);
    }
    
    //创建XML文件
    public void CreateXML(string fileName,string thisData)
    {
        //string xxx = Encrypt(thisData);
        string xxx = thisData;
        StreamWriter writer;
        writer = File.CreateText(fileName);
        writer.Write(xxx);
        writer.Close();
    }
    
    //读取XML文件
    public string LoadXML(string fileName)
    {
        StreamReader sReader = File.OpenText(fileName);
        string dataString = sReader.ReadToEnd();
        sReader.Close();
        //string xxx = Decrypt(dataString);
        string xxx = dataString;
        return xxx;
    }
    
    //判断是否存在文件
    public bool hasFile(String fileName)
    {
        return File.Exists(fileName);
    }
    public string UTF8ByteArrayToString(byte[] characters  )
    {    
        UTF8Encoding encoding  = new UTF8Encoding();
        string constructedString  = encoding.GetString(characters);
        return (constructedString);
    }
    
    public byte[] StringToUTF8ByteArray(String pXmlString )
    {
        UTF8Encoding encoding  = new UTF8Encoding();
        byte[] byteArray  = encoding.GetBytes(pXmlString);
        return byteArray;
    }
}

后面是加载数据:

代码:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public static class DataLoadTest{
    public static List<Data> LevelData = new List<Data>();
    //static string _fileName = Application.dataPath + "/Resource/gamedata";
    static string _fileName = Application.persistentDataPath + "/gamedata";
    public static void Save()
    {
        string s = XmlSaver.GetInstance().SerializeObject(LevelData, typeof(List<Data>));
        XmlSaver.GetInstance().CreateXML(_fileName, s);
    }
    public static void Load()
    {
        try{
            string s = XmlSaver.GetInstance().LoadXML(_fileName);
            LevelData = XmlSaver.GetInstance().DeserializeObject(s, typeof(List<Data>)) as List<Data>;
        }
        catch {
            TraverseList();
            Save();
            string s = XmlSaver.GetInstance().LoadXML(_fileName);
            LevelData = XmlSaver.GetInstance().DeserializeObject(s, typeof(List<Data>)) as List<Data>;
        }
            
    }
    public static void TraverseList()
    {
        List<ScrollData> everyScrollData = new List<ScrollData>();
        everyScrollData.Add(new ScrollData(false, "挖掘机学校哪家强"));
        everyScrollData.Add(new ScrollData(false, "中国山东找蓝翔"));
        everyScrollData.Add(new ScrollData(false, "我特喵的只是开发者用来测试的"));

everyScrollData.Add(new ScrollData(false, "有我所不乐意的,在天堂里,我不愿意去;有我所不乐意的,在地狱里,我不愿意去; 有我所不乐意的,在你们的世界里,我不愿意去。 "));
        everyScrollData.Add(new ScrollData(false, "我只愿蓬勃生活在此时此刻, 无所谓去哪,无所谓见谁。 那些我将要去的地方,都是我从未谋面的故乡; 那些我将要见的人,都会成为我的朋友。"));
        everyScrollData.Add(new ScrollData(false, "以前是以前,现在是现在。 我不能选择 怎么生,怎么死; 但我能决定 怎么爱,怎么活。这是我要的自由,我的黄金时代。 "));

everyScrollData.Add(new ScrollData(false, "栈和队列的区别是啥?"));
        everyScrollData.Add(new ScrollData(false, "吃多了拉就是队列;"));
        everyScrollData.Add(new ScrollData(false, "吃多了吐就是栈"));

everyScrollData.Add(new ScrollData(false, "壮岁旌旗拥万夫,锦襜突骑渡江初。燕兵夜娖银胡簶,汉箭朝飞金仆姑。"));
        everyScrollData.Add(new ScrollData(false, "追往事,叹今吾,春风不染白髭须。"));
        everyScrollData.Add(new ScrollData(false, "却将万字平戎策,换得东家种树书。"));

everyScrollData.Add(new ScrollData(false, "第一天,小白兔去河边钓鱼,什么也没钓到,回家了。 "));
        everyScrollData.Add(new ScrollData(false, "第二天,小白兔又去河边钓鱼,还是什么也没钓到,回家了。"));
        everyScrollData.Add(new ScrollData(false, "第三天,小白兔刚到河边,一条大鱼从河里跳出来,冲着小白兔大叫:你他妈的要是再敢用胡箩卜当鱼饵,我就扁死你!"));

everyScrollData.Add(new ScrollData(false, "程序员的读书历程:x 语言入门 —> x 语言应用实践 —> x 语言高阶编程 —> "));
        everyScrollData.Add(new ScrollData(false, "x 语言的科学与艺术 —> 编程之美 —> 编程之道 —> "));
        everyScrollData.Add(new ScrollData(false, "编程之禅 —> 颈椎病康复指南 —> 精神病康复指南 "));

everyScrollData.Add(new ScrollData(false, "在一个精神病院里,有一天院长想看看三个精神病人的恢复情况如何,于是在他们每人面前放了一只小白兔。第一个精神病人坐在小白兔的上面,揪着小白兔的两只耳朵,嘴里嚷着“驾”,院长摇了摇头;"));
        everyScrollData.Add(new ScrollData(false, "第二个人背对着小白兔,拍着它的屁股,嘴里说着“给我追”,院长叹了口气;"));
        everyScrollData.Add(new ScrollData(false, "第三个蹲在那里一个劲儿的摸着小白兔,院长看后,满意地点点头,只听他说了一句:“小样的,放你300米,等我擦好车再追你!”院长倒地晕倒……"));

everyScrollData.Add(new ScrollData(false, "创新无极限!只要敢想,没有什么不可能,立即跳出思维的框框吧。如果你正处于一个上升的朝阳行业,那么尝试去寻找更有效的解决方案:更招消费者喜爱、更简洁的商业模式。"));
        everyScrollData.Add(new ScrollData(false, "如果你处于一个日渐萎缩的行业,那么赶紧在自己变得跟不上时代之前抽身而出,去换个工作或者转换行业。不要拖延,立刻开始创新!"));
        everyScrollData.Add(new ScrollData(false, "--史蒂夫.乔布斯"));

everyScrollData.Add(new ScrollData(false, "从前现在过去了再不来 红红落叶长埋尘土内 开始终结总是没变改 天边的你飘泊白云外 苦海翻起爱恨 在世间难逃避命运 相亲竟不可接近 或我应该相信是缘份"));
        everyScrollData.Add(new ScrollData(false, "情人别后永远再不来 无言独坐放眼尘世外 鲜花虽会凋谢 但会再开 一生所爱隐约 在白云外"));
        everyScrollData.Add(new ScrollData(false, "苦海翻起爱恨 在世间难逃避命运 相亲竟不可接近 或我应该相信是缘份 苦海翻起爱恨 在世间难逃避命运 相亲竟不可接近 或我应该相信是缘份"));
        LevelData.Add(new Data(0,true, "level1", everyScrollData[0], everyScrollData[1], everyScrollData[2]));
        LevelData.Add(new Data(1,false, "level2", everyScrollData[3], everyScrollData[4], everyScrollData[5]));
        LevelData.Add(new Data(2,false, "level3", everyScrollData[6], everyScrollData[7], everyScrollData[8]));
        LevelData.Add(new Data(3,false, "level4", everyScrollData[9], everyScrollData[10], everyScrollData[11]));
        LevelData.Add(new Data(4,false, "level5", everyScrollData[12], everyScrollData[13], everyScrollData[14]));
        LevelData.Add(new Data(5,false, "level6", everyScrollData[15], everyScrollData[16], everyScrollData[17]));
        LevelData.Add(new Data(6,false, "level7", everyScrollData[18], everyScrollData[19], everyScrollData[20]));
        LevelData.Add(new Data(7,false, "level8", everyScrollData[21], everyScrollData[22], everyScrollData[23]));
        LevelData.Add(new Data(8,false, "level9", everyScrollData[24], everyScrollData[25], everyScrollData[26]));
    }
    public static List<Data> getlistData()
    {     
        Load ();
        //TraverseList();
        return LevelData;
    }
    public static string GetLevelName(int i)
    {
        return LevelData [i].LevelName;
    }
}

时间: 2024-11-05 16:02:25

unity3d里的XML读写示例的相关文章

spring-servlet.xml简单示例

spring-servlet.xml简单示例 某个项目中的spring-servlet.xml 记下来以后研究用 1 <!-- springMVC简单配置 --> 2 <?xml version="1.0" encoding="UTF-8"?> 3 <beans xmlns="http://www.springframework.org/schema/beans" 4 xmlns:xsi="http://w

XML读写

private string fileName = HttpContext.Current.Server.MapPath("~/Student.xml"); protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { GetAllStudent(); } } private void GetAllStudent() { ddlStudent.Items.Clear(); XmlDocument do

【Python】Python XML 读写

class ACTIVE_FILE_PROTECT_RULE_VIEW(APIView): renderer_classes = (JSONRenderer, BrowsableAPIRenderer) parser_classes = (JSONParser,) def post(self, request): from datetime import datetime from django.utils import timezone from django.utils.timezone i

在Unity3D里使用DLL

开始第一篇的内容: 首先,我们需要新建一个类库项目,可以使用Visual Studio或者Monodevelop来做.我这里是使用vs2012来创建: 选择好项目类型.写好项目名称. 新生成的项目里面默认有一个Class1类 可以通过在解决方案资源管理器里面进行重命名改成自己想要的类名,比如我这里改成了Math3D 然后写一个简单的静态方法在里面.这里我写了个最简单的加法(Add).也可以不写静态方法,写出普通的public方法,用的时候new对象出来调用该方法也可以.这和正常的C#编程没区别.

Unity3D项目程序加密1——在Unity3D里使用自己的dll

Unity3D做出来的项目是非常容易被反编译的,被反编译后你的所有资源和代码都将会毫无遮掩的呈现出来.由于.net本身没什么加密的措施,所以我们一般都是使用混淆代码的方式来对程序进行一定的加密.接下来2篇博客,简单的讲一下我自己在Unity3D的程序加密做法.首先第一篇,我会简单的说明一下怎样在Unity3D里面使用dll动态链接库,然后第二篇会说明怎样对dll进行混淆. 开始第一篇的内容: 更多内容请访问[狗刨学习网]http://unity.gopedu.com 首先,我们需要新建一个类库项

log4j.xml配置示例

这是log4j1.x版本讲解,log4j-1.2.16.jar    1. 一般的log4j.xml的两种配置方式: 1.Logger 完成日志信息的处理定义输出的层次和决定信息是否输出DEBUG<INFO<WARN<ERROR 2.Appender 设置日志信息的去向常用的:org.apache.log4j.ConsoleAppender(控制台)org.apache.log4j.FileAppender(文件)org.apache.log4j.DailyRollingFileAppe

XML 读写-JDOM和DOM4j

一.JDOM的XML读写 1.JDOM的XML 读 1 import java.io.File; 2 import java.io.IOException; 3 import java.util.Iterator; 4 import java.util.List; 5 import org.jdom.Document; 6 import org.jdom.Element; 7 import org.jdom.JDOMException; 8 import org.jdom.input.SAXBu

Unity3D里的各种坐标系

一.Unity3D中有哪些坐标系? ??坐标系这个概念最早是由法国数学家笛卡尔提出的,并由此创造了用代数方法来研究几何图形的数学分支--解析几何.解析几何的基本思想是将几何图形抽象成点的运动轨迹,从而点可以作为组成图形的基本元素,而描述一个点的位置首先需要建立合适的坐标系.所以,首先我们来了解下Unity3D中都有哪些坐标系吧!Unity3D中的坐标系目前可以分为以下四类:世界坐标.屏幕坐标.视图坐标和GUI坐标.下面我们来对这5类坐标进行详细说明: 世界坐标 世界坐标按照笛卡尔坐标系定义出来的

SQL 里解析 XML 格式 字段 信息

DECLARE @ItemMessage XML DECLARE @ItemTable TABLE(No NVARCHAR(300),zje NVARCHAR(300),yfje NVARCHAR(300),bcje NVARCHAR(300),URL NVARCHAR(300),Remark NVARCHAR(300)) SET @ItemMessage=N'<List> <item> <No>SM-JG-201303-0189</No> <zje&