Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: Kang en Agosto 31, 2018, 01:46:15 PM

Título: Problemas para manejar datos en XML
Publicado por: Kang en Agosto 31, 2018, 01:46:15 PM


   
      
         
            
               

                  

                     Francisco Carlos Bocanegra Jiménez (https://www.facebook.com/franciscocarlos.bocanegrajimenez?fref=gs&hc_ref=ARRJdo-zCljl5KSD9lav6IbSFeG-nGWf3cNIC1rIXCKfPobSlwKB1-SUMSyQ2vDqDPs&dti=117464668584544&hc_location=group)
                  

                  

                     
                        
                           
                              
                                 
                                    
                                       
                                          
                                              
                                          
                                       
                                    
                                 
                              
                           
                        
                     
                     54 min (https://www.facebook.com/groups/Unityes/permalink/765539363777068/)
                  
               
            
         
      
   

 


   Buenas abro esta consulta porque estoy realizando un inventario que se guarde en XML, anteriormente hice otro pero ahora mi problema es que no entiendo porque debo poner la database en static, ya que si lo hago no puedo realizar los cambios mediante el inspector. os dejo imágenes para que podáis verlo visualmente, ya que no se como añadir a dicha database los valores con código, porque no consigo acceder hasta los niveles mas profundos.


   Si alguien puede ayudarme o conoce algún resource que me ayude a la hora de trabajar posteriormente con los valores se lo agradezco, gracias de antemano.


    


   La pregunta es como podría añadir mas objetos a dicho xml mediante código desde otra class, porque no sé como acceder al nivel de la database correspondiente.
   PD: no me deja adjuntar la imagen asi que pongo el trozo de código: 


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
public class InventorySaveController : MonoBehaviour {
    
    public static InventoryDatabase inventoryDB;
 
    public static void SaveItems()
    {
        XmlSerializer serializer = new XmlSerializer(typeof(InventoryDatabase));
        FileStream stream = new FileStream(Application.dataPath + "/Resources/XMLSaves/ContainerContents.xml", FileMode.Create);
        serializer.Serialize(stream, inventoryDB);
        stream.Close();
    }
 
    [System.Serializable]
   public class ItemEntry
    {
        public string itemName;
        public int quantity;
    }
   [System.Serializable]
   public class InventoryDatabase
   {
         [XmlArray("Inventory")]
         public List<ItemEntry> list = new List<ItemEntry>();
   }
 
}


    
Título: Problemas para manejar datos en XML
Publicado por: juanma_teso en Agosto 31, 2018, 08:28:06 PM
Hola!! No veo dónde instancias el InventoryDatabase para asignarlo al singleton, como lo tienes ahora para acceder al (objeto) InventoryDatabase tienes que hacer referencia a la clase InventoryDatabaseSaver, es decir:
 

IntentoryDatabaseSaver.InventoryDatabase

 
Para agregar un ItemEntry tendrías que hacer lo siguente:
 

InventoryDatabaseSaver.InventoryDatabase.list.Add(..tu item..);

 
Como ves para acceder al list tienes que hacer referencia de forma jerárquica.
 
El hecho de ponerle el modificador static facilita la referencia pero no es necesario.
Título: Problemas para manejar datos en XML
Publicado por: Kang en Septiembre 04, 2018, 01:18:11 PM
Correcto @juanma_teso al final ya he podido guardar los objetos en el archivo XML antes de ver tu consulta, lo siento ^^, pero ahora tengo otra duda, he creado un for que añada los items de una lista, pero al recorrerla y guardarla, me guarda el mismo dato por cada item que tiene dicha lista, adjunto imagenes para ver si podeis corregirme.
 


  •    La imagen "interactable" es donde está el for que recorre la lista y tiene el .Add como me indicaste arriba, pero quiero que añada nuevos cada vez, pero que no se sobrescriba al recorrerlos.



 


  •    La imagen "xmlfilesave" es donde se crean las clases para el guardado y creacion del archivo xml.



 


  •    La imagen "xmlsaved" muestra el error de que me sobrescribe cada uno de los items con el ultimo valor de la lista que le paso.


Título: Problemas para manejar datos en XML
Publicado por: juanma_teso en Septiembre 04, 2018, 01:52:56 PM
Puedes usar la función Contains que te devuelve true si encuentra el objeto:
 

if(lista.Contains(...item...))
Tiene el item, sumas la cantidad?
else
Lo añades