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