zoukankan      html  css  js  c++  java
  • Save and Load from XML

    using UnityEngine; 
    using System.Collections; 
    using System.Xml; 
    using System.Xml.Serialization; 
    using System.IO; 
    using System.Text; 
     
    public class _GameSaveLoad: MonoBehaviour { 
     
       // An example where the encoding can be found is at 
       // http://www.eggheadcafe.com/articles/system.xml.xmlserialization.asp 
       // We will just use the KISS method and cheat a little and use 
       // the examples from the web page since they are fully described 
     
       // This is our local private members 
       Rect _Save, _Load, _SaveMSG, _LoadMSG; 
       bool _ShouldSave, _ShouldLoad,_SwitchSave,_SwitchLoad; 
       string _FileLocation,_FileName; 
       public GameObject _Player; 
       UserData myData; 
       string _PlayerName; 
       string _data; 
     
       Vector3 VPosition; 
     
       // When the EGO is instansiated the Start will trigger 
       // so we setup our initial values for our local members 
       void Start () { 
          // We setup our rectangles for our messages 
          _Save=new Rect(10,80,100,20); 
          _Load=new Rect(10,100,100,20); 
          _SaveMSG=new Rect(10,120,400,40); 
          _LoadMSG=new Rect(10,140,400,40); 
     
          // Where we want to save and load to and from 
          _FileLocation=Application.dataPath; 
          _FileName="SaveData.xml"; 
     
          // for now, lets just set the name to Joe Schmoe 
          _PlayerName = "Joe Schmoe"; 
     
          // we need soemthing to store the information into 
          myData=new UserData(); 
       } 
     
       void Update () {} 
     
       void OnGUI() 
       {    
     
       //*************************************************** 
       // Loading The Player... 
       // **************************************************       
       if (GUI.Button(_Load,"Load")) { 
     
          GUI.Label(_LoadMSG,"Loading from: "+_FileLocation); 
          // Load our UserData into myData 
          LoadXML(); 
          if(_data.ToString() != "") 
          { 
            // notice how I use a reference to type (UserData) here, you need this 
            // so that the returned object is converted into the correct type 
            myData = (UserData)DeserializeObject(_data); 
    		// set the players position to the data we loaded 
            VPosition=new Vector3(myData._iUser.x,myData._iUser.y,myData._iUser.z);              
            _Player.transform.position=VPosition; 
            // just a way to show that we loaded in ok 
            Debug.Log(myData._iUser.name); 
          } 
     
       } 
     
       //*************************************************** 
       // Saving The Player... 
       // **************************************************    
       if (GUI.Button(_Save,"Save")) { 
     
         GUI.Label(_SaveMSG,"Saving to: "+_FileLocation); 
         myData._iUser.x=_Player.transform.position.x; 
         myData._iUser.y=_Player.transform.position.y; 
         myData._iUser.z=_Player.transform.position.z; 
         myData._iUser.name=_PlayerName;    
     
         // Time to creat our XML! 
         _data = SerializeObject(myData); 
         // This is the final resulting XML from the serialization process 
         CreateXML(); 
         Debug.Log(_data); 
       } 
     
     
       } 
     
       /* The following metods came from the referenced URL */ 
       string UTF8ByteArrayToString(byte[] characters) 
       {      
          UTF8Encoding encoding = new UTF8Encoding(); 
          string constructedString = encoding.GetString(characters); 
          return (constructedString); 
       } 
     
       byte[] StringToUTF8ByteArray(string pXmlString) 
       { 
          UTF8Encoding encoding = new UTF8Encoding(); 
          byte[] byteArray = encoding.GetBytes(pXmlString); 
          return byteArray; 
       } 
     
       // Here we serialize our UserData object of myData 
       string SerializeObject(object pObject) 
       { 
          string XmlizedString = null; 
          MemoryStream memoryStream = new MemoryStream(); 
          XmlSerializer xs = new XmlSerializer(typeof(UserData)); 
          XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8); 
          xs.Serialize(xmlTextWriter, pObject); 
          memoryStream = (MemoryStream)xmlTextWriter.BaseStream; 
          XmlizedString = UTF8ByteArrayToString(memoryStream.ToArray()); 
          return XmlizedString; 
       } 
     
       // Here we deserialize it back into its original form 
       object DeserializeObject(string pXmlizedString) 
       { 
          XmlSerializer xs = new XmlSerializer(typeof(UserData)); 
          MemoryStream memoryStream = new MemoryStream(StringToUTF8ByteArray(pXmlizedString)); 
          XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8); 
          return xs.Deserialize(memoryStream); 
       } 
     
       // Finally our save and load methods for the file itself 
       void CreateXML() 
       { 
          StreamWriter writer; 
          FileInfo t = new FileInfo(_FileLocation+"\"+ _FileName); 
          if(!t.Exists) 
          { 
             writer = t.CreateText(); 
          } 
          else 
          { 
             t.Delete(); 
             writer = t.CreateText(); 
          } 
          writer.Write(_data); 
          writer.Close(); 
          Debug.Log("File written."); 
       } 
     
       void LoadXML() 
       { 
          StreamReader r = File.OpenText(_FileLocation+"\"+ _FileName); 
          string _info = r.ReadToEnd(); 
          r.Close(); 
          _data=_info; 
          Debug.Log("File Read"); 
       } 
    } 
     
    // UserData is our custom class that holds our defined objects we want to store in XML format 
     public class UserData 
     { 
        // We have to define a default instance of the structure 
       public DemoData _iUser; 
        // Default constructor doesn't really do anything at the moment 
       public UserData() { } 
     
       // Anything we want to store in the XML file, we define it here 
       public struct DemoData 
       { 
          public float x; 
          public float y; 
          public float z; 
          public string name; 
       } 
    }

查看全文
  • 相关阅读:
    Oracle:SQL语句--对表的操作——修改列的数据类型( 即 修改字段的数据类型)
    Oracle:SQL语句--对表的操作——修改列的数据类型( 即 修改字段的数据类型)
    有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和
    有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和
    鸡兔同笼:笼子里一共有鸡和兔子35只,一共有94条退, 笼子里一共有鸡和兔子共多少只
    jQuery,使用on代替delegate,live 写法区别
    安卓手机微信页面position: fixed位置错误
    表单提交是ajax提交,PC提交没问题但是手机提交就会一直跳到error,并且也没状态码一直是0
    新版本的jquery checkbox 全选反选代码只能执行一遍,第二次就失败attr与prop区别
    倒计时js代码
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10544252.html
  • Copyright © 2011-2022 走看看