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