//Funcion que con el nombre del nivel (el mismo que el del xml) crea los gameobjects del nivel
    public GameObject generateLevel(string nameLevel)
    {
        //Extraemos el XML y lo deserializamos
        TextAsset xmlTextAsset = (TextAsset)Resources.Load("LevelsXML/"+nameLevel, typeof(TextAsset));
        StringReader stream = new StringReader(xmlTextAsset.text);
        XmlSerializer s = new XmlSerializer(typeof(structureXML));
        m_structureXML = s.Deserialize(stream) as structureXML;

        //Creamos un gameObject vacio que representará el nivel
        GameObject goLevel = new GameObject(nameLevel);
        goLevel.transform.position = Vector3.zero;
        goLevel.transform.parent = Managers.GetInstance.SceneMgr.rootScene.transform;

        Managers.GetInstance.TimeMgr.seconds = m_structureXML.time.seconds;
        Managers.GetInstance.SceneMgr.spawnPointPlayer = new Vector3(m_structureXML.spawnPoint.x, m_structureXML.spawnPoint.y, 0);

        //Creamos cada uno de los items definidos en el XML en la posicion alli indicada, con el scale alli indicado.
        foreach (structureXML.Item go in m_structureXML.prefabs.items)
        {
            GameObject newGO = Managers.GetInstance.SpawnerMgr.createGameObject(Resources.Load("Prefabs/GamePrefabs/" + go.prefab) as GameObject, new Vector3(go.x, go.y, 0), Quaternion.identity);
            newGO.transform.localScale = new Vector3(go.scaleX, go.scaleY, 1);
            //Finalmente como padre ponemos al gameObject que representa el nivel
            newGO.transform.parent = goLevel.transform;
        }

        return goLevel;
    }
    public void generateNewXML(GameObject level)
    {
        //Definimos la parte del tiempo. Se colocará en el XML segun los datos indicados en el prefab correspondiente al nivel en el componente timeManager
        structureXML.Time time = new structureXML.Time();
        time.seconds = level.GetSafeComponent<definingLevel>().seconds;

        structureXML.SpawnPoint spawnPoint = new structureXML.SpawnPoint();
        spawnPoint.x = level.GetSafeComponent<definingLevel>().spawnPoint.x;
        spawnPoint.y = level.GetSafeComponent<definingLevel>().spawnPoint.y;

        //Definimos un bloque de prefabs en el XML
        structureXML.Prefabs levelPrefabs = new structureXML.Prefabs();

        //Guardamos espacio para cada uno de los elementos del nivel para pasarlos al xml
        levelPrefabs.items = new structureXML.Item[level.transform.childCount];

        int i = 0;

        //Recorremos todos los hijos del prefab que representa al nivel
        foreach (Transform item in level.transform)
        {
            string originalPrefabName = item.name.Split('_')[0];

            //Creamos la estructura con los datos necesarios del elemento a instanciar posteriormente.
            levelPrefabs.items[i] = new structureXML.Item();
            levelPrefabs.items[i].prefab = originalPrefabName;
            levelPrefabs.items[i].x = item.position.x;
            levelPrefabs.items[i].y = item.position.y;
            levelPrefabs.items[i].rotZ = item.localRotation.eulerAngles.x;
            levelPrefabs.items[i].scaleX = item.localScale.x;
            levelPrefabs.items[i].scaleY = item.localScale.y;

            ++i;
        }

        //Creamos el elemento a exportar. En el XML tendrá una apartado para el tiempo, y otro que define todos los prefabs del nivel
        structureXML levelToExport = new structureXML();
        levelToExport.prefabs = levelPrefabs;
        levelToExport.time = time;
        levelToExport.spawnPoint = spawnPoint;

        //Exportamos
        FileStream stream = new FileStream("./Assets/Resources/LevelsXML/" + level.name + ".xml", FileMode.Create);
        XmlSerializer s = new XmlSerializer(typeof(structureXML));
        s.Serialize(stream, levelToExport);
    }