查看: 2688|回复: 4
打印 上一主题 下一主题

Unity3D读取保存XML文件

[复制链接]

1602

主题

1

听众

2万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
24658
精华
6

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2012-3-16 12:43:09 |只看该作者 |倒序浏览
/* unity3d读取保存XML文件
代码已测试,无误。就一个脚本。
运行时会首先执行FirstSave()函数,该函数的作用是初始化XML里的内容,如果该XMl不存在,则会自动创建并初始化。

按下save按钮后执行Save()函数会把数据保存到指定的XMl里

按下load按钮后会执行Load()函数把你保存在XML里的数据读取出来

导出exe后XML文件会保存在Data文件夹里,修改XML里面的数据,运行,你会发现读取的数据是你刚刚修改过的数据。

想在unity项目中使用配置文件或者需要保存和读取数据但又不想使用数据库的可以看看

可以保存和读取的数据类型支持英文、中文、浮点型、整型 */

    import System;
import System.Xml;
import System.Xml.Serialization;
import System.IO;
import System.Text;

class CeshiData{
 var Ceshi1 : String;
 var Ceshi2 : String;
 var Ceshi3 : float;
 var Ceshi4 : int;
}

 class UserData
{
 public var _iUser : CeshiData = new CeshiData();
 function UserData() { }
}

private var c1 : String;
private var c2 : String;
private var c3 : float;
private var c4 : int;
private var _FileLocation : String;
private var _FileName : String = "CeshiData.xml";

var myData : UserData[];
private var tempData : UserData = new UserData();

var i : int = 0;

var GUISkin1 : GUISkin;
var ShowData : int = 0;
function Awake(){
 _Filelocation=Application.dataPath;
}

function Start(){
 FirstSave();
}

function FirstSave(){//初始化XML
 tempData._iUser.Ceshi1 = "?";
 tempData._iUser.Ceshi2 = "?";
 tempData._iUser.Ceshi3 = 0;
 tempData._iUser.Ceshi4 = 0;
 var writer : StreamWriter;
 var t : FileInfo = new FileInfo(_FileLocation+"/"+ _FileName);
 if(!t.Exists)
 {
 writer = t.CreateText();
 _data = SerializeObject(tempData);
 for(i=0;i<10;i++){
 writer.WriteLine(_data);
 }
 writer.Close();
 }

}

function Save(sc1 : String,sc2 : String,sc3 : float,sc4 : int){//保存数据到指定的XMl里

 tempData._iUser.Ceshi1 = sc1;
 tempData._iUser.Ceshi2 = sc2;
 tempData._iUser.Ceshi3 = sc3;
 tempData._iUser.Ceshi4 = sc4;

 var writer : StreamWriter;
 var t : FileInfo = new FileInfo(_FileLocation+"/"+ _FileName);
 t.Delete();
 writer = t.CreateText();
 _data = SerializeObject(tempData);
 for(i=0;i<10;i++){
 writer.WriteLine(_data);
 }
 writer.Close();

}

function Load(){//读取保存在XML里的数据
 var r : StreamReader = File.OpenText(_FileLocation+"/"+ _FileName);
 var _info : String ;
 for(i=0;i<10;i++){
 _info = r.ReadLine();
 _data=_info;
 myData = DeserializeObject(_data);
 }
 r.Close();
}

function OnGUI() {
 GUI.skin = GUISkin1;
 if(GUI.Button(Rect(0,0,100,40),"save")){
 Save("ceshi1","测试2",1.23,50);//要显示中文需设定中文字体
 }
 if(GUI.Button(Rect(200,0,100,40),"load")){
 Load();
 ShowData = 1;
 }
 if(ShowData == 1){
 GUI.Label(Rect(170,170+53*0,150,50),myData[0]._iUser.Ceshi1);
 GUI.Label(Rect(370,170+53*0,150,50),myData[0]._iUser.Ceshi2);
 GUI.Label(Rect(550,170+53*0,150,50),myData[0]._iUser.Ceshi3 + "");
 GUI.Label(Rect(760,170+53*0,150,50),myData[0]._iUser.Ceshi4 + "");

 GUI.Label(Rect(170,170+53*1,150,50),myData[1]._iUser.Ceshi1);

 GUI.Label(Rect(370,170+53*2,150,50),myData[2]._iUser.Ceshi2);

 GUI.Label(Rect(550,170+53*3,150,50),myData[3]._iUser.Ceshi3 + "");

 GUI.Label(Rect(760,170+53*4,150,50),myData[4]._iUser.Ceshi4 + "");
 }
}

//================================================================================
function UTF8ByteArrayToString(characters : byte[] )
{
 var encoding : UTF8Encoding = new UTF8Encoding();
 var constructedString : String = encoding.GetString(characters);
 return (constructedString);
}

//byte[] StringToUTF8ByteArray(string pXmlString)
function StringToUTF8ByteArray(pXmlString : String)
{
 var encoding : UTF8Encoding = new UTF8Encoding();
 var byteArray : byte[] = encoding.GetBytes(pXmlString);
 return byteArray;
}

 // Here we serialize our UserData object of myData
 //string SerializeObject(object pObject)
function SerializeObject(pObject : Object)
{
 var XmlizedString : String = null;
 var memoryStream : MemoryStream = new MemoryStream();
 var xs : XmlSerializer = new XmlSerializer(typeof(UserData));
 var xmlTextWriter : XmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
 xs.Serialize(xmlTextWriter, pObject);
 memoryStream = xmlTextWriter.BaseStream; // (MemoryStream)
 XmlizedString = UTF8ByteArrayToString(memoryStream.ToArray());
 return XmlizedString;
}

 // Here we deserialize it back into its original form
 //object DeserializeObject(string pXmlizedString)
function DeserializeObject(pXmlizedString : String)
{
 var xs : XmlSerializer = new XmlSerializer(typeof(UserData));
 var memoryStream : MemoryStream = new MemoryStream(StringToUTF8ByteArray(pXmlizedString));
 var xmlTextWriter : XmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
 return xs.Deserialize(memoryStream);
}
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

409

主题

1

听众

8429

积分

高级设计师

Rank: 6Rank: 6

纳金币
8423
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2012-3-16 17:47:53 |只看该作者
谢谢啦
回复

使用道具 举报

409

主题

1

听众

8429

积分

高级设计师

Rank: 6Rank: 6

纳金币
8423
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

板凳
发表于 2012-3-16 17:48:02 |只看该作者
回复

使用道具 举报

409

主题

1

听众

8429

积分

高级设计师

Rank: 6Rank: 6

纳金币
8423
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

地板
发表于 2012-3-16 17:48:18 |只看该作者
代码已测试,无误
回复

使用道具 举报

797

主题

1

听众

1万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
5568
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

5#
发表于 2012-3-16 18:59:26 |只看该作者
  学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-27 15:04 , Processed in 0.158077 second(s), 32 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部