01.import System;
02.import System.Collections;
03.import System.Xml;
04.import System.Xml.Serialization;
05.import System.IO;
06.import System.Text;
07.// Anything we want to store in the XML file, we define it here
08.class DemoData
09.{
10. var x : float;
11. var y : float;
12. var z : float;
13. var name : String;
14.}
15.// UserData is our custom class that holds our defined objects we want to store in XML format
16. class UserData
17. {
18. // We have to define a default instance of the structure
19. public var _iUser : DemoData = new DemoData();
20. // Default constructor doesn't really do anything at the moment
21. function UserData() { }
22.}
23.//public class GameSaveLoad: MonoBehaviour {
24.// An example where the encoding can be found is at
25.// http://www.eggheadcafe.com/articles/system.xml.xmlserialization.asp
26.// We will just use the KISS method and cheat a little and use
27.// the examples from the web page since they are fully described
28.// This is our local private members
29.private var _Save : Rect;
30.private var _Load : Rect;
31.private var _SaveMSG : Rect;
32.private var _LoadMSG : Rect;
33.//var _ShouldSave : boolean;
34.//var _ShouldLoad : boolean;
35.//var _SwitchSave : boolean;
36.//var _SwitchLoad : boolean;
37.private var _FileLocation : String;
38.private var _FileName : String = "SaveData.xml";
39.//public GameObject _Player;
40.var _Player : GameObject;
41.var _PlayerName : String = "Joe Schmoe";
42.private var myData : UserData;
43.private var _data : String;
44.private var VPosition : Vector3;
45.// When the EGO is instansiated the Start will trigger
46.// so we setup our initial values for our local members
47.//function Start () {
48.function Awake () {
49. // We setup our rectangles for our messages
50. _Save=new Rect(10,80,100,20);
51. _Load=new Rect(10,100,100,20);
52. _SaveMSG=new Rect(10,120,200,40);
53. _LoadMSG=new Rect(10,140,200,40);
54.
55. // Where we want to save and load to and from
56. _FileLocation=Application.dataPath;
57.
58.
59. // we need soemthing to store the information into
60. myData=new UserData();
61. }
62.
63.function Update () {}
64.
65.function OnGUI()
66.{
67. // ***************************************************
68. // Loading The Player...
69. // **************************************************
70. if (GUI.Button(_Load,"Load")) {
71.
72. GUI.Label(_LoadMSG,"Loading from: "+_FileLocation);
73. // Load our UserData into myData
74. LoadXML();
75. if(_data.ToString() != "")
76. {
77. // notice how I use a reference to type (UserData) here, you need this
78. // so that the returned object is converted into the correct type
79. //myData = (UserData)DeserializeObject(_data);
80. myData = DeserializeObject(_data);
81. // set the players position to the data we loaded
82. VPosition=new Vector3(myData._iUser.x,myData._iUser.y,myData._iUser.z);
83. _Player.transform.position=VPosition;
84. // just a way to show that we loaded in ok
85. Debug.Log(myData._iUser.name);
86. }
87.
88. }
89.
90. // ***************************************************
91. // Saving The Player...
92. // **************************************************
93. if (GUI.Button(_Save,"Save")) {
94.
95. GUI.Label(_SaveMSG,"Saving to: "+_FileLocation);
96. //Debug.Log("SaveLoadXML: sanity check:"+ _Player.transform.position.x);
97.
98. myData._iUser.x = _Player.transform.position.x;
99. myData._iUser.y = _Player.transform.position.y;
100. myData._iUser.z = _Player.transform.position.z;
101. myData._iUser.name = _PlayerName;
102.
103. // Time to creat our XML!
104. _data = SerializeObject(myData);
105. // This is the final resulting XML from the serialization process
106. CreateXML();
107. Debug.Log(_data);
108. }
109.}
110.
111./* The following metods came from the referenced URL */
112.//string UTF8ByteArrayToString(byte[] characters)
113.function UTF8ByteArrayToString(characters : byte[] )
114.{
115. var encoding : UTF8Encoding = new UTF8Encoding();
116. var constructedString : String = encoding.GetString(characters);
117. return (constructedString);
118.}
119.//byte[] StringToUTF8ByteArray(string pXmlString)
120.function StringToUTF8ByteArray(pXmlString : String)
121.{
122. var encoding : UTF8Encoding = new UTF8Encoding();
123. var byteArray : byte[] = encoding.GetBytes(pXmlString);
124. return byteArray;
125.}
126.
127. // Here we serialize our UserData object of myData
128. //string SerializeObject(object pObject)
129.function SerializeObject(pObject : Object)
130.{
131. var XmlizedString : String = null;
132. var memoryStream : MemoryStream = new MemoryStream();
133. var xs : XmlSerializer = new XmlSerializer(typeof(UserData));
134. var xmlTextWriter : XmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
135. xs.Serialize(xmlTextWriter, pObject);
136. memoryStream = xmlTextWriter.BaseStream; // (MemoryStream)
137. XmlizedString = UTF8ByteArrayToString(memoryStream.ToArray());
138. return XmlizedString;
139.}
140. // Here we deserialize it back into its original form
141. //object DeserializeObject(string pXmlizedString)
142.function DeserializeObject(pXmlizedString : String)
143.{
144. var xs : XmlSerializer = new XmlSerializer(typeof(UserData));
145. var memoryStream : MemoryStream = new MemoryStream(StringToUTF8ByteArray(pXmlizedString));
146. var xmlTextWriter : XmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
147. return xs.Deserialize(memoryStream);
148.}
149. // Finally our save and load methods for the file itself
150.function CreateXML()
151.{
152. var writer : StreamWriter;
153. //FileInfo t = new FileInfo(_FileLocation+"\\"+ _FileName);
154. var t : FileInfo = new FileInfo(_FileLocation+"/"+ _FileName);
155. if(!t.Exists)
156. {
157. writer = t.CreateText();
158. }
159. else
160. {
161. t.Delete();
162. writer = t.CreateText();
163. }
164. writer.Write(_data);
165. writer.Close();
166. Debug.Log("File written.");
167.}
168.
169.function LoadXML()
170.{
171. //StreamReader r = File.OpenText(_FileLocation+"\\"+ _FileName);
172. var r : StreamReader = File.OpenText(_FileLocation+"/"+ _FileName);
173. var _info : String = r.ReadToEnd();
174. r.Close();
175. _data=_info;
176. Debug.Log("File Read");
177.}
178.//}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhulinpptor/archive/2010/09/07/5868654.aspx