Noticias

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

Editor de Niveles

Iniciado por timonerf50, Febrero 02, 2016, 05:37:11 PM

Tema anterior - Siguiente tema
Buenas tardes.Estoy haciendo un proyecto universitario, en el cual necesito hacer un editor de niveles.Necesito que al pulsar con el ratón en un lugar del terreno visto desde arriba, me salga un pequeño menú (GuiText o GuiButton por ejemplo) donde pueda elegir si colocar en ese lugar uno u otro objeto (cubo o esfera, por ejemplo), y que aparezca dicho objeto en el lugar (como prefabs).Por dónde podría empezar? Toda ayuda es bienvenida. Gracias y saludos.

1 - Aprende UI
2 - ScreenRayCast to WorldPosition
3 - ProgramarEs muy facil, con esas tres referencias podrias date una idea de como hacerlo.

Antes que nada bienvenido,te prometo que mi duda es muy seria y no trato de vacilar eh ! pero ... has pensado en empezar por el sitio mas evidente ? me refiero a la propia universidad.hubiera tenido que nacer unos años mas tarde, por lo visto en la actualidad la universidad es algo tiradisimo ... para hacer un proyecto universitario solo hay que meterse en un foro.Que "maravillosos" años en los que, para hacer trabajos de la universidad, habia que echarle un monton de horas comiendote la cabeza y aplicando lo que aprendias en la propia universidad

luego salen de la universidad y cuando van a trabajar... foro xDDD

Febrero 04, 2016, 04:20:04 PM #4 Ultima modificación: Febrero 04, 2016, 04:30:07 PM por timonerf50
Buenas tardes.Gracias por las respuestas/consejos. He conseguido realizar este script.    public Transform Esfera;    private bool showGUI;
    private string selectedObject = "";
    
    void Update () {        {  
            if (Input.GetMouseButtonDown (1)) {
                if (showGUI == true) {
                    showGUI = false;
                } else if (showGUI == false) {
                    showGUI = true;
                }
            }
        }        if(selectedObject != "")
        {
            if(selectedObject=="Cubo")
            {
                if (Input.GetMouseButtonDown (0))
                {
                    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                    RaycastHit hit;
                    if (Physics.Raycast(ray, out hit, 100))
                    {
//                        Transform newTransform = Instantiate(Cubo, hit.point, Quaternion.identity) as Transform;
//                        GameObject newGameObject = newTransform as GameObject;
                        GameObject newGameObject = (GameObject) Instantiate(Cubo, hit.point, Quaternion.identity);
                        newGameObject.name = "Cubo";
                    }
                }    
            }
            if(selectedObject=="Esfera")
            {
                if (Input.GetMouseButtonDown (0))
                {
                    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                    RaycastHit hit;
                    if (Physics.Raycast(ray, out hit, 100))
                    {
                        Transform newTransform = Instantiate(Cubo, hit.point, Quaternion.identity) as Transform;
//                        GameObject newGameObject = newTransform as GameObject;
//                        newGameObject.name = "Esfera";
                        GameObject newGameObject = (GameObject) Instantiate(Esfera, hit.point, Quaternion.identity);
                        newGameObject.name = "Esfera";
                    }
                }    
            }
        }
    }
    void OnGUI()
    { 
        if(showGUI == true)
        {
            if(GUI.Button(new Rect(20,20,100,80), "Cubo"))
            {
                selectedObject = "Cubo";
            }
            if(GUI.Button(new Rect(20,100,100,80), "Esfera"))
            {
                selectedObject = "Esfera";
            }
        }
    }
} Ya tengo el código hecho, pero no me hace nada a la hora de jugar. Sabéis por qué? Saludos.

Chico, si ese codigo lo has hecho tu ... tienes muchos motivos para dejar la carrera universitaria.

Prueba a cambiar el 100 del raycast por Mathf.Infinity

[quote author=Arthure" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35070" data-ipsquote-contentcommentid="126797 date=1454600625]Chico, si ese codigo lo has hecho tu ... tienes muchos motivos para dejar la carrera universitaria.[/quote]A parte de quejas podrías aportar algo más? Contenido como ese no me ayuda en nada, te agradecería que, o no me hablases más, o me dijeras algo constructivo, gracias.  

No era una queja, solo un consejo de buena fe que encima agradeceria tu bolsillo.A parte de eso tienes toda la razon cuando dices que para escribir eso, mejor no hubiera escrito nada ... pero tambien, para pegarte el farol diciendo que es un trabajo universitario, mejor no hubieras dicho nada; supongo que hay gente que escribe eso (porque tampoco es el primero) pensando que va a recibir mas ayuda cuando el efecto esta comprobado que es el contrario.Suerte con ese trabajo de la universidad

Cuando algo no tira siempre pongo Debug.Log() para saber por dónde entra la ejecución y qué falla...
Prueba a mirar el valor de selectedobject, puedes usar el UI.Dropdown para tener varias opciones, así restringes un poco y no andas con strings, prueba: primero RayCast al terreno, segundo activas el Dropdown y por último selecciona la opción, desactivas el dropdown e instancias el objeto.

Gracias por las respuestas, ya conseguí que funcionase.Estoy probando el modo juego del editor, construyendo prefabs. Me funciona bien, lo único que me falta es que a la hora de cambiar de esa escena a la del juego, se me queden grabados los prefabs y aparezcan en el terreno tal cual los cree yo.Estoy mirando soluciones, en principio me dijeron que con Player.Prefs, podría hacerlo. Saludos.

Mira esto, puede ser más sencillo.

[quote author=juanma_teso" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35070" data-ipsquote-contentcommentid="126832">Mira http://docs.unity3d.com/ScriptReference/Object.DontDestroyOnLoad.html date=1454692494]esto, puede ser más sencillo.[/quote]Gracias juanma_teso, lo hice antes ya mediante el DontDestroyOnLoad. No obstante gracias por la ayuda. Estoy mirando para hacer, en vez de mediante GUIButton, hacerlo por un canvas, tenerlo oculto hasta que pulse en el terreno, y que de ahí salgan 2 iconos, de los cuales puedo elegir si hacer un cubo o una esfera. Estoy trabajando en ello ahora mismo. Saludos.

Buenas tardes de nuevo.Me podríais ayudar a adjuntar un GameObject/Transform a un botón de un Canvas?Para que me cree los GameObjects que yo deseo cuando pulse un botón del Canvas donde yo quiera. Saludos y gracias.

Crea un script con una variable pública del tipo GameObject, desde el editor asigna tu GameObject, haz una función pública también que te instancie 'Instantiate()' el GameObject, en la función haz todo lo que quieras con ese GameObject, modifica la posición, rotación y añádele los componentes que quieras (esto si el GameObject que has asignado desde el editor no tiene los componentes). Ahora crea el botón UI desde el editor de Unity y le asignas la función que has creado al OnClick().

Etiquetas: