Jump to content
UnitySpain

Aceptamos donaciones vía Paypal.

UnitySpain.com es un servicio gratuito, pero mantener la Comunidad conlleva una serie de gastos.

Fondo Anual Unityspain: Donados 15,00€ de 150,00€

  • Servidor: Dominio.com y Hosting Web
  • Mantenimiento de los Foros
  • Contenido y Servicios Extras
  • Mantenimiento para Redes Sociales

Salva

Fosiles
  • Content Count

    9
  • Joined

  • Last visited

Posts posted by Salva


  1. Puedes hacerlo con el sistema de PlayerPrefs...

    Cuando termines un nivel por ejemplo el 1 pones PlayerPrefs.SetInt("nivel1");

    y al objeto que quieras que desaparezca le puedes poner : if (PlayerPrefs.HasKey("nivel1")){  Destroy(gameObject);  }

    puedes ir probando y adaptandolo luego a tus necesidades...

    Gracias! lo hice y ya funciona, la unica pega es que para que ocurra tengo que darle a stop y volver a darle al play, si no lo hago siguen bloqueados, el script lo puse dentro del boton que tengo en la pantalla principal para entrar a la seleccion de niveles


  2. Saludos gente, estoy terminando un jueguecillo muy simple pero no consigo hacer para que al conseguir X puntuacion esta haga que en otra escena, en una ventana de selección de niveles que ya tengo hecha desaparezca un objeto que es la imagen de un candado y aparezca en su lugar la imagen del nivel con el collider para entrar al susodicho nivel, alguna sugerencia? :blink:


  3. De acuerdo, hago el código y en cuanto lo tenga lo comparto :D

    EDIT:
    Perfecto! Ya lo tengo hecho. Me ha llevado poco tiempo después de todo... :P

    Aquí está:

    • SeleccionNivel.cs:

    using UnityEngine;
    using System.Collections;
    using System.Collections.Generic;
    
    /**
     * - Esta clase será nuestra interfaz para cargar el nivel. Para que se muestre, debemos añadirla
     * como componente a un objeto dentro del juego, y crear una nueva cámara
     */
    public class SeleccionNivel : MonoBehaviour {
    	// Atributos privados
    	private List<Nivel> listaNiveles = new List<Nivel>(); // Lista de niveles
    	private Nivel nivelSeleccionado; // Nivel seleccionado
    
    	/**
    	 *  - Metodo preconstruido por UnityEngine que se autoejecuta al iniciar el juego
    	 */
    	public void Start() {
    		// Añadimos dos niveles ("Nivel1" y "Nivel2")
    		Nivel nivel1 = new Nivel ("Nivel1", 0);
    		Nivel nivel2 = new Nivel ("Nivel2", 1);
    
    		añadirNivel (nivel1);
    		añadirNivel (nivel2);
    
    		// Comprobacion de que los niveles se han añadido correctamente
    		Debug.Log ("Niveles en la lista: " + listaNiveles.Count.ToString ());
    
    		// Añadimos el primer nivel creado como el nivel seleccionado por defecto
    		nivelSeleccionado = listaNiveles[0];
    
    	}
    
    	/**
    	 * - Metodo para añadir un nivel especifico a la lista de niveles
    	 */
    	public void añadirNivel(Nivel nivel) {
    		if (!listaNiveles.Contains (nivel)) {
    			listaNiveles.Add (nivel);
    			Debug.Log ("Nuevo nivel añadido! Nombre: " + nivel.getNombre () + ", id: " + nivel.getNumeroNivel());
    		} else {
    			Debug.LogError ("El nivel que intentas añadir ya existe! (nombre: " + nivel.getNombre() + ", id: " + nivel.getNumeroNivel() + ")");
    		}
    	}
    
    	/**
    	 * - Metodo para eliminar un nivel especifico de la lista de niveles
    	 */
    	public void eliminarNivel(Nivel nivel) {
    		if(listaNiveles.Contains (nivel)) {
    			listaNiveles.Remove (nivel);
    			Debug.Log ("El nivel ha sido eliminado correctamente! (nombre: " + nivel.getNombre() + ", id: " + nivel.getNumeroNivel() + ")");
    		} else {
    			Debug.LogError ("El nivel no existe dentro de la lista de niveles! (nombre: " + nivel.getNombre() + ", id: " + nivel.getNumeroNivel() + ")");
    		}
    	}
    
    	/**
    	 * - Metodo preconstruido por UnityEngine para dibujar todos los elementos de una GUI (Graphic User Interface)
    	 */
    	public void OnGUI() {
    		// Crea un contenedor para organizar visualmente la interfaz
    		GUI.Box (new Rect (5,5,160,50), ""); // El segundo parametro es un string el cual se refiere al nombre que mostraria el contenedor. En este caso, no le ponemos nombre
    
    		// Crea dos labels (textos) para mostrar tanto el nombre del nivel como su numero de identificacion (id)
    		GUI.Label (new Rect (10, 10, 150, 30), "Nombre: " + nivelSeleccionado.getNombre()); // Nombre del nivel
    		GUI.Label (new Rect (10, 30, 150, 30), "ID: " + nivelSeleccionado.getNumeroNivel().ToString()); // Identificador del nivel
    
    		// Crea los botones para seleccionar los respectivos niveles
    		if (GUI.Button (new Rect (10, 60, 150, 30), "Siguiente")) { // Boton para avanzar
    			int indexNivelSeleccionado = listaNiveles.IndexOf (nivelSeleccionado); // Posicion que ocupa el nivel en la lista
    
    			if(indexNivelSeleccionado < listaNiveles.Count-1) // Si el nivel seleccionado no es el ultimo, se avanza. Si no, no se hace nada
    				nivelSeleccionado = listaNiveles[indexNivelSeleccionado+1];
    		}
    
    		if (GUI.Button (new Rect (10, 95, 150, 30), "Atras")) { // Boton para retroceder
    			int indexNivelSeleccionado = listaNiveles.IndexOf (nivelSeleccionado); // Posicion que ocupa el nivel en la lista
    			
    			if(indexNivelSeleccionado > 0) // Si el nivel seleccionado no es el primero, se retrocede. Si no, no se hace nada
    				nivelSeleccionado = listaNiveles[indexNivelSeleccionado-1];
    		}
    
    		// Crea un boton para cargar el nivel seleccionado
    		if (GUI.Button (new Rect (10, 130, 150, 30), "Cargar nivel")) {
    			nivelSeleccionado.loadLevel ();
    			Debug.Log ("Nivel cargado: " + nivelSeleccionado.getNombre() + "(" + nivelSeleccionado.getNumeroNivel() + ")");
    		}
    	}
    }

    • Nivel.cs (Objeto):

    using UnityEngine;
    using System.Collections;
    
    /**
     * - Esta clase es nuestro nivel. No puede ser añadida a ningun objeto del juego, y por ende, no puede formar parte de la escena.
     * No obstante, se puede crear una instancia de esta clase escribiendo, en un atributo de tipo Nivel, new Nivel("Nombre", id)
     * 
     * * El nombre es el nombre de la escena. Es recomendable que se ponga el mismo nombre que la escena
     * 
     * * El ID es el numero de identificacion de la escena. Si vamos al editor de unity y entramos en
     * File > Build Settings..., podremos añadir una nueva escena, y asi poder cargarla. Asi pues,
     * el numero de identificacion es el numero que nos sale a la derecha de cada escena añadida
     */
    public class Nivel {
    	private string nombre;
    	private int numeroNivel;
    
    	// Constructor de la clase Nivel
    	public Nivel(string nombre, int numeroNivel) {
    		this.nombre = nombre;
    		this.numeroNivel = numeroNivel;
    	}
    
    	// GETTERS & SETTERS
    		// Getters..
    	public string getNombre() { // Metodo que devuelve el nombre del nivel
    		return nombre;
    	}
    
    	public int getNumeroNivel() { // Metodo que devuelve el numero de identificacion del nivel
    		return numeroNivel;
    	}
    
    		// Setters..
    	public void setNombre(string nombre) { // Metodo que modifica el nombre del nivel por un nombre definido en el parametro
    		this.nombre = nombre;
    	}
    	
    	public void setNumeroNivel(int number) { // Metodo que modifica el numero de identificacion del nivel por un numero definido en el parametro
    		this.numeroNivel = number;
    	}
    
    	// Metodos funcionales
    	public void loadLevel() { // Metodo para cargar este nivel
    		Application.LoadLevel (numeroNivel+1); // Aqui lo cargamos con el identificador del nivel. Podemos hacerlo tambien con el mismo nombre, pero si existen dos niveles nombrados de igual manera, pueden haber errores.
    	}
    }

    Como he explicado en los comentarios de cada clase, debes añadir el script SeleccionNivel a un objeto cualquiera de la escena la cual será para cargar los diferentes niveles, además de que tendrá que existir al menos una cámara para poder renderizar el GUI.

    Para añadir diferentes niveles, primero deberás añadir la escena al Build, para poder cargarlas. Para ello, antes que nada debes abrir la escena que quieres guardar. Entonces, debes ir a "File > Build Settings...", y dentro, con la escena cargada, darle al botón "Add Current". Así se añadirá la escena al compilador. Una vez añadida, te saldrá un número a la derecha de la nueva escena: es el número de identificación. Con él puedes cargar cualquier escena (como se ha hecho dentro de la clase Nivel.cs, en el método loadLevel()').

    Para añadir una nueva escena al selector (al GUI de SeleccionNivel.cs), solamente tendrás que crear una nueva variable tipo Nivel en el método Start de la misma clase (por ejemplo, Nivel nivel3 = new Nivel("Nivel3", 2)) y añadirla a la lista mediante el método local "añadirNivel(Nivel)". Una vez hecho esto, el nivel será añadido a la lista de niveles seleccionables.

    Como se ha explicado en el comentario de la clase Nivel.cs, es recomendable que en el constructor Nivel(string nombre, int id) pongas como nombre el nombre exacto de la escena, y como id, el valor previamente nombrado (número de identificación del nivel).

    Espero que te haya servido de algo! :P

    Cualquier duda o problema que tengas, sin dudarlo me lo comentas! :D

    Por cierto, creo que haré algunos post para ayudar a gente que este entrando en el mundillo de Unity... pueden ser útiles (entre ellos irá algo como esto) :P

    wow gracias, estas hecho un maquina, ojala y vea mas post tuyos de este estilo como me comentas!


  4. De nada, por supuesto. Para eso está la comunidad de UnitySpain! :P Si quieres te puedo pasar algunas plantillas para hacer lo que quieres explicadas paso a paso. Me llevaría algún tiempo para probarlas y comprobar que funcionan correctamente, pero la verdad es que a mi me va mejor aprender viendo el propio script y viendo en él lo que hacen

    Joder, pues estaria genial, si no es mucha molestia claro, te agradezco mucho la oferta!!:D:rolleyes:


  5. Soy nuevo en esto del mundillo de Unity, los videojuegos han sido una cosa que siempre me han apasionado y me encantaba la idea de empezar a hacer el mio propio:P

    Espero que este foro y su gente me ayude a crecer para poder devolver el favor cuando sepa mas y echar yo una mano jajajaj

    Aprovecho la presentación para preguntar, ¿Me recomendais algún libro, serie de videotutoriales o algo para apoyarme? actualmente conozco la interfaz basica de unity, asi como lo basico de programacion en C# y Java, operaciones, arrays, funciones basicas...Lo básico

    Nos vemos por el foro!


  6. Tengo poca idea de programacion, lo mas basico de lo basico, me informaré en lo que me comentais de GUI y a ver que pasa, muchas gracias por vuestro tiempo chicos :P

    Tal y como he entendido, quieres hacer una interfaz (GUI). Para ello te dejo la documentación oficial de Unity sobre componentes GUI. Lo que quieres son 'GUI.Button' y diferentes GUI.Label (quizá algún GUI.DrawImage) para mostrar qué nivel es el que está seleccionado actualmente. La mecánica es simple: un array que contenga todos los niveles, al pulsar el botón de la izquierda, baje en ese array (a no ser que esté seleccionado ya el primer nivel), y al pulsar el botón de la derecha, suba en ese array (a no ser que esté seleccionado ya el último nivel).

    Diría que lo primero que deberían aprender es en pensar en componentes. Creo que vienen con pensamiento de código centralizado, o sea, código que tiene que distribuir y enviar mensajes a todo el UI centralizando todos los objetos p.ej.

    Tengo poca idea de programacion, lo mas basico de lo basico, me informaré en lo que me comentais de GUI y a ver que pasa, muchas gracias por vuestro tiempo chicos :P


  7. Saludos gente, soy muy novato por aqui en el tema de la creacion de videojuegos y tengo una duda, estoy haciendoo una especie de seleccion de nivel muy simple para un juego 2D, consiste en una imagen central que es un collider 2D para entrar al susodicho nivel y a ambos lados unas flechas para pasar a la pantalla del siguiente nivel y asi sucesivamente. El problema que se me presenta es que no se como hacer para que con un mismo script decirle a unity: diferenciame a que collider le hago click, si a la flecha o al nivel y actua en consecuencia"

    Gracias de antemano

×
×
  • Create New...