Помогите со скриптом сохранения позиции игрока с помощью XML

Общие вопросы о Unity3D

Помогите со скриптом сохранения позиции игрока с помощью XML

Сообщение AlbertWesker 08 авг 2012, 15:36

Вот скрипт :

Синтаксис:
Используется csharp
using UnityEngine;
using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
using System.Xml;
using System.IO;


public class SaveLoad : MonoBehaviour {

        Transform playerTransform;
       
        public Vector3 playerPosition = new Vector3(0,0,0);
       
        void Awake(){  
 playerTransform = GameObject.Find("player").transform;

 Load();

 }

       
        void Save(){  
 
    string filepath = "data.xml";
    XmlDocument xmlDoc = new XmlDocument ();
    XmlNode rootNode = null;
        if (!File.Exists(filepath))
        {  
        rootNode = xmlDoc.CreateElement ("level");
        xmlDoc.AppendChild (rootNode);
       }
       else {  
      xmlDoc.Load(filepath);
       rootNode = xmlDoc.DocumentElement;
             }
       
     rootNode.RemoveAll ();  
         
           
              XmlElement elmNew = xmlDoc.CreateElement ("player");
                   
                          XmlAttribute position_Z = xmlDoc.CreateAttribute ("position_z");
                  position_Z.Value = playerTransform.position.z.ToString ();
                  XmlAttribute position_Y = xmlDoc.CreateAttribute ("position_y");
                  position_Y.Value = playerTransform.position.y.ToString ();
                          XmlAttribute position_X = xmlDoc.CreateAttribute ("position_x");  
                  position_X.Value = playerTransform.position.x.ToString();
          elmNew.SetAttributeNode (position_Z);
          elmNew.SetAttributeNode (position_Y);
          elmNew.SetAttributeNode (position_X);
      rootNode.AppendChild (elmNew);  
       
     xmlDoc.Save (filepath);  
 
 }
       

         void Load(){    
 
     string filepath = "data.xml";    
     XmlDocument xmlDoc = new XmlDocument ();    
     xmlDoc.Load(filepath);    
 
      XmlNodeList levelList = xmlDoc.GetElementsByTagName ("Level");        
                    foreach (XmlNode level in levelList)    
                          {
                       XmlNode  node = level.SelectSingleNode("player");
                       XmlAttributeCollection attr = node.Attributes;
                       string s1 = attr[0].Value;
                       float x_coord = System.Convert.ToSingle (s1);
                       s1 = attr[1].Value;
                       float y_coord = System.Convert.ToSingle (s1);
                       s1 = attr[2].Value;
                       float z_coord = System.Convert.ToSingle (s1);
                       playerPosition = new Vector3(x_coord,y_coord,z_coord);
 
                           }
 
       
 }
               
        void Update () {
        if (Input.GetKeyDown (KeyCode.I)) {
     Save();
    }
    if (Input.GetKeyDown (KeyCode.P)) {
     Load();
    }  
        }
}
 


Позицию игрока скрипт то вроде бы сохраняет, вот текст в XML :
<level>
<player position_x="371.0868" position_y="456.4431" position_z="390.0807"/>
</level>

А вот при нажатие кнопки загрузки ничего не происходит, кто знает как это решить объясните пожалуйста.
AlbertWesker
UNец
 
Сообщения: 2
Зарегистрирован: 07 авг 2012, 13:45

Re: Помогите со скриптом сохранения позиции игрока с помощью XML

Сообщение vva 08 авг 2012, 16:34

Синтаксис:
Используется csharp

/// <summary>
/// для сохранения и загрузки в XML
/// </summary>
/// <typeparam name="ObjectType"></typeparam>
public static class cSaveXML<ObjectType>
{
    public static void Save(object obj, string fileName)
    {
        StreamWriter fs = new StreamWriter(fileName);
        //
        try
        {
            XmlSerializer xsr = new XmlSerializer(typeof(ObjectType));
            xsr.Serialize(fs, obj);
        }
        catch (SerializationException e)
        {
            Debug.Log("!!! XMLSaver_Save Failed to serialize. Reason: " + e.Message);
            throw;
        }
        finally
        {
            fs.Close();
        }
    }

    public static ObjectType Load(string fileName)
    {
        if (!File.Exists(fileName))
            return default(ObjectType);

        StreamReader fs = new StreamReader(fileName);
        ObjectType obj;
        try
        {
            XmlSerializer xsr = new XmlSerializer(typeof(ObjectType));
            obj = (ObjectType)xsr.Deserialize(fs);
        }
        catch (SerializationException e)
        {
            Debug.Log("Failed to deserialize. Reason: " + e.Message);
            throw;
        }
        finally
        {
            fs.Close();
        }
        return obj;
    }
}
 


Синтаксис:
Используется csharp

/// <summary>
/// данные для сохранения в файл XML языки
/// </summary>
[System.Serializable]
public class cData_XML_Language
{
    /// <summary>
    /// имя
    /// </summary>
    public string m_Name = "";
    /// <summary>
    /// текст управления
    /// </summary>
    public string m_Text = "";
    /// <summary>
    /// текст подсказки
    /// </summary>
    public string m_TextHint = "";
    /// <summary>
    /// текст заголовка
    /// </summary>
    public string m_TextHead = "";
    //------------------------------------------------
    /// <summary>
    /// данные для сохранения в файл XML языки
    /// </summary>
    public cData_XML_Language()
    {
    }
    /// <summary>
    /// установить параметр
    /// </summary>
    /// <param name="fcBase"></param>
    public void Set_Parameter(cBase fcBase)
    {
        m_Name = fcBase.Get_Name();
        m_Text = fcBase.Get_Text();
        m_TextHint = fcBase.Get_TextHint();
        m_TextHead = fcBase.Get_TextHead();
    }
} //------------------------------------------------
 


Синтаксис:
Используется csharp
List<cData_XML_Language> pcSave = new List<cData_XML_Language>();
.... заносим данные и сохраняем
cSaveXML<List<cData_XML_Language>>.Save(pcSave, pPath + "\\" + pFileName);
 


Синтаксис:
Используется csharp
List<cData_XML_Language> pcLoad = cSaveXML<List<cData_XML_Language>>.Load(pPath + "\\" + pFileName);
.... после загрузки читаем данные
foreach (cData_XML_Language pData in pcLoad)
{
}
 
vva
UNITрон
 
Сообщения: 215
Зарегистрирован: 16 мар 2011, 22:22
Откуда: планета земля
Skype: vvavvavva3
  • Сайт

Re: Помогите со скриптом сохранения позиции игрока с помощью XML

Сообщение AlbertWesker 08 авг 2012, 17:57

vva писал(а):
Синтаксис:
Используется csharp

/// <summary>
/// для сохранения и загрузки в XML
/// </summary>
/// <typeparam name="ObjectType"></typeparam>
public static class cSaveXML<ObjectType>
{
    public static void Save(object obj, string fileName)
    {
        StreamWriter fs = new StreamWriter(fileName);
        //
        try
        {
            XmlSerializer xsr = new XmlSerializer(typeof(ObjectType));
            xsr.Serialize(fs, obj);
        }
        catch (SerializationException e)
        {
            Debug.Log("!!! XMLSaver_Save Failed to serialize. Reason: " + e.Message);
            throw;
        }
        finally
        {
            fs.Close();
        }
    }

    public static ObjectType Load(string fileName)
    {
        if (!File.Exists(fileName))
            return default(ObjectType);

        StreamReader fs = new StreamReader(fileName);
        ObjectType obj;
        try
        {
            XmlSerializer xsr = new XmlSerializer(typeof(ObjectType));
            obj = (ObjectType)xsr.Deserialize(fs);
        }
        catch (SerializationException e)
        {
            Debug.Log("Failed to deserialize. Reason: " + e.Message);
            throw;
        }
        finally
        {
            fs.Close();
        }
        return obj;
    }
}
 


Синтаксис:
Используется csharp

/// <summary>
/// данные для сохранения в файл XML языки
/// </summary>
[System.Serializable]
public class cData_XML_Language
{
    /// <summary>
    /// имя
    /// </summary>
    public string m_Name = "";
    /// <summary>
    /// текст управления
    /// </summary>
    public string m_Text = "";
    /// <summary>
    /// текст подсказки
    /// </summary>
    public string m_TextHint = "";
    /// <summary>
    /// текст заголовка
    /// </summary>
    public string m_TextHead = "";
    //------------------------------------------------
    /// <summary>
    /// данные для сохранения в файл XML языки
    /// </summary>
    public cData_XML_Language()
    {
    }
    /// <summary>
    /// установить параметр
    /// </summary>
    /// <param name="fcBase"></param>
    public void Set_Parameter(cBase fcBase)
    {
        m_Name = fcBase.Get_Name();
        m_Text = fcBase.Get_Text();
        m_TextHint = fcBase.Get_TextHint();
        m_TextHead = fcBase.Get_TextHead();
    }
} //------------------------------------------------
 


Синтаксис:
Используется csharp
List<cData_XML_Language> pcSave = new List<cData_XML_Language>();
.... заносим данные и сохраняем
cSaveXML<List<cData_XML_Language>>.Save(pcSave, pPath + "\\" + pFileName);
 


Синтаксис:
Используется csharp
List<cData_XML_Language> pcLoad = cSaveXML<List<cData_XML_Language>>.Load(pPath + "\\" + pFileName);
.... после загрузки читаем данные
foreach (cData_XML_Language pData in pcLoad)
{
}
 



Расскажите пожалуйста как применить эти ваши скрипты чтобы сохранять и загружать координаты игрока а то я что то не понимаю что с этими скриптами делать :-\ ?
AlbertWesker
UNец
 
Сообщения: 2
Зарегистрирован: 07 авг 2012, 13:45

Re: Помогите со скриптом сохранения позиции игрока с помощью XML

Сообщение seaman 08 авг 2012, 18:19

что с этими скриптами делать

Первое что нужно сделать с любыми скриптами, если хочешь их использовать,- понять как они работают. Если Вы не можете это сделать - отложите в сторону свою задачу и возьмитесь за что-нибудь попроще.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9