Jump to content
Sign in to follow this  
EnrMF

XML guardar datos

Recommended Posts

Hola a todos:
tengo el siguiente script que lo que hace es guardar el nombre y los puntos en un XML generado. El problema que tengo es que cuando lo ejecuto en el editor de Unity funciona perfectamente y se van añadiendo los datos, en sus respectivos nodos. Sin embargo, en Android va reescribiendo sobre el nodo existente, es decir, solo hay un nombre con su puntuación. Adjunto el código del script y el XML generado. 
No entiendo porque en el editor de Unity funciona y en Android no.
Gracias
 

public class SavingXML : MonoBehaviour
 
 
  {
     
         public XmlDocument xmlDoc;
     
     
         //LOAD THE EXISTING FILE    
         public void loadXMLFromAssets()
         {
             
      
     
                     
             xmlDoc = new XmlDocument();
            
             TextAsset textXml = (TextAsset)Resources.Load("jugadores", typeof(TextAsset));
             
             xmlDoc.LoadXml(textXml.text);
     
         }
        
     
     
         //Add XML data
         public void UpdateXML()
         {
             
             if (xmlDoc == null)
             {
                 loadXMLFromAssets(); 
             }
     
             
             XmlNode parentNode = xmlDoc.SelectSingleNode("players");
             XmlNode playerNode = xmlDoc.CreateElement("player");
             XmlNode nameNode = xmlDoc.CreateElement("nombre");
             XmlNode scoreNode = xmlDoc.CreateElement("puntos");
     
     
     
             nameNode.InnerText = PlayerPrefs.GetString("name");
             scoreNode.InnerText = (PlayerPrefs.GetInt("savedscore").ToString());
     
     
             parentNode.AppendChild(playerNode);
             playerNode.AppendChild(nameNode);
             playerNode.AppendChild(scoreNode);
     
            
             #if UNITY_EDITOR
             xmlDoc.Save(Application.dataPath + "/Resources/jugadores.xml");
             #elif UNITY_ANDROID || UNITY_IOS
             xmlDoc.Save(Application.persistentDataPath + "/Resources/jugadores.xml");
             #endif
     
         }
     
     
         public class Player 
         {
     
             public string name { get; set; }
             public int score { get; set; }
         }
 


 /*/////XML SAVED/GENERATED   
  
     
 <?xml version="1.0" encoding="utf-8"?>
 <players>
   <player>
     <nombre>Peter</nombre>
     <puntos>70</puntos>
   </player>
 </players>
       
 */

 

Share this post


Link to post
Share on other sites

Buenas.

El problema lo tienes (si no me equivoco) en que cuando guardas el archivo de puntuaciones para Android lo haces en la ruta Application.persistentDataPath : https://docs.unity3d.com/ScriptReference/Application-persistentDataPath.html que se corresponde con /storage/sdcard/Android/data/com.prueba.es/files/

Pero cuando lo lees, lo sigues leyendo de Resources.Load, por lo tanto vuelves a leer el archivo original.Por lo tanto sólo te va a guardar el último.

Si sabes de Android y manejas el Android Studio, puedes crear un emulador y exportar el proyecto de Unity a un proyecto Android y desde el Android Studio puedes acceder al amulador y acceder a sus carpetas para ver lo que se crea....(https://klevshova.wordpress.com/2017/02/24/how-to-test-unity-app-for-android-platform-in-emulator-in-android-studio/)

 

PD: Yo haciendo pruebas tuve que crear a mano el directorio Resources en la tarjeta SD de Android,  ya que no existe inicialmente. Supongo que tú ya lo tienes creado previamente pero no se muestra en tu código.

Share this post


Link to post
Share on other sites
Sign in to follow this  

UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...