Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Problemas para manejar datos en XML

Iniciado por Kang, Agosto 31, 2018, 01:46:15 PM

Tema anterior - Siguiente tema
Agosto 31, 2018, 01:46:15 PM Ultima modificación: Septiembre 01, 2018, 11:44:28 AM por pioj


   
      
         
            
               

                  

                     Francisco Carlos Bocanegra Jiménez
                  

                  

                     
                        
                           
                              
                                 
                                    
                                       
                                          
                                              
                                          
                                       
                                    
                                 
                              
                           
                        
                     
                     54 min
                  
               
            
         
      
   

 


   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>();
   }
 
}


    

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.

Septiembre 04, 2018, 01:18:11 PM #2 Ultima modificación: Septiembre 04, 2018, 01:20:20 PM por Kang
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.



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

 
 

Etiquetas: