Noticias

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

foreach de prefabs

Iniciado por fernando, Marzo 30, 2017, 05:32:19 PM

Tema anterior - Siguiente tema


Buenas. Tengo una funcion que lee datos de un xml que es esta:
 


private string xmlPath;
    public XmlManager(string xmlPath) {
        this.xmlPath = xmlPath;
}
 public Datos ReadXmlTest() {
        XmlSerializer serializer = new XmlSerializer(typeof(Datos));
        StreamReader reader = new StreamReader(xmlPath);
        Datos data = (Datos)serializer.Deserialize(reader);
        reader.Close();
        return data;
    }


lo que ago con eso es conseguir unas rutas de unas fotos y guardar todas las rutas en data.
 


Luego tengo esta clase
 


using System.Diagnostics;
using UnityEngine;
public class AppButton : MonoBehaviour {
    private Juego game;
    public void Init(Juego game) {
        this.game = game;
    }
    private void RunApp() {
        Process.Start(game.ruta);
    }
}


y luego tengo esta clase donde esta el foreach
 


private Datos data;
    public GameObject Button;
    void Awake() {
        string path = "C:/Users/datos.xml";
        XmlManager xmlMng = new XmlManager(path);
        data = xmlMng.ReadXmlTest();
        foreach (var juego in data.Juegos) {
            GameObject newButton = (GameObject)Instantiate(Button);
            newButton.GetComponent<AppButton>();
            //
            //
        }
    }


En la ultima clase donde estan las // tengo que LLamar al Init de AppButton con juego pero no se como hacerlo. Y aparte de eso como puedo hacer que por cada elemento que alla en el xml,se cree un boton con la imagen que hay en las rutas de los xml.
 


Espero explicarme bien soy nuevo en esto


vas a tenes que aprender a utilizar XML y lógicamente a programar un poquito más.
 
Primero necesitas un Prefabs de los Botones.
 
Segundo Podrías utilizar Resources.Load para recuperar una imagen por su ruta.
 
Tercero para llamar al init simplemente 
 

newButton.GetComponent<AppButton>().Init();

 
 

Marzo 30, 2017, 06:07:18 PM #2 Ultima modificación: Marzo 30, 2017, 06:10:46 PM por Arthure
Hola @fernando
 
sin entrar en que el codigo este perfecto o tenga errores, o lo que quieras conseguir hacer ... te dire que ese foreach es una tonteria en el sentido que no cumple ningun objetivo.
 
La funcion de un foreach es recorrer una lista de objetos, y en cada salto guarda el objeto correspondiente dentro de una variable (en tu caso seria la variable 'juego') para despues poder realizar cierta accion con cada uno de los objetos ... pero tu no utilizas dicha variable en ningun momento.
 
Si lo que pretendes es instanciar tantos botones como elementos tenga la lista pero no vas a trabajar sobre cada objeto en concreto, seria mas logico (y recomendable) utilizar un simple for poniendo como limite el length de la lista.
 
P.D. he escrito todo lo anterior solo mirando el codigo y sin leer lo que habias escrito despues ... corrijo, el foreach es correcto: solo tienes que acceder al componente Image de cada boton y establecer el valor almacenado en la variable donde tengas la imagen del objeto 'juego'

Etiquetas: