Noticias

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

usando transform de GameObjects para Botones GUI

Iniciado por farenhai, Junio 10, 2015, 02:19:35 PM

Tema anterior - Siguiente tema
Junio 10, 2015, 02:19:35 PM Ultima modificación: Mayo 30, 2016, 04:16:22 AM por pioj
Buenas, explico mi problema.
 
Resulta que estoy haciendo prefabs de botones, porque en el juego que estoy haciendo voy a necesitar como medio millar xD
 
El caso es que, después de implementar a un cubo (cuyo Mesh desactivo para dejar sólo visible el botón) el siguiente código
 

using UnityEngine;
using System.Collections;
 
public class boton_rotacionMenu : MonoBehaviour {
 
public GameObject button;
 
    public Texture boton;
 
    // Use this for initialization
    void Start () {
    
    }
    
    // Update is called once per frame
    void Update () {
  
     }
 
            void OnGUI ()
            {
        if (!boton) {
    Debug.LogError("Please assign a texture on the inspector");
    
}
        if (GUI.Button(new Rect(button.transform.position.x, button.transform.localPosition.z, button.transform.localScale.x, button.transform.localScale.z), boton))
                {
    Debug.Log("Clicked the button with an image");
                }
 }
}

 
resulta que, mientras que el eje X funciona casi perfectamente (sólo aparece un poco desviado, fácilmente corregible aplicándole un float que haga de offset), resulta que el eje Z del botón se comporta de manera INVERSA a cómo lo hace el gameObject de referencia.
 
Es decir, que si muevo el gameObject hacia arriba, el botón se desplaza hacia abajo y viceversa. He intentado corregir esto con una variable float que reste la posición de Z, pero aunque funciona, sólo lo hace parcialmente (tengo que especificar el nuevo valor de offset a cada vez mientras el juego está en "play", pues no queda fijado como si fuera un child).
 
 
 
¿Alguien sabe por qué sucede esto y cómo lo puedo solventar??
 
 
 
MIl gracias!

Si giras la Camara 180º(Nose hacia donde mira en tu caso por lo que no puedo concretar) puede que inviertas un eje a nivel visual pero no estoy seguro...
 
Otra manera que se me ocurre es jugando con lo siguiente:

//Sabiendo que:
transform.position.y = (Screen.height - posVertical);
//estara invertido verticalmente respecto de
transform.position.y = posVertical;

Por lo que como deduzco que en tu caso el eje Z es el vertical puedes probar:

new Rect(button.transform.position.x, Screen.height - button.transform.localPosition.z, button.transform.localScale.x, Screen.height-button.transform.localScale.z)

Espero que te sirva,
venos diciendo
Un saludo!

Visita http://www.programacionwh.com encontraras tutoriales y muchas cosas .


Tambien puedes visitar mi canal de YouTube https://www.youtube.com/channel/UClSCTn0wPN1iFjED0yaoJUA



Funciona perfectamente!!! (con un pequeño paréntesis en la resta entre screen.height y la transform.position)
 
Para el que le pueda venir bien, añado la línea corregida:
 
new Rect(button.transform.position.x, (Screen.height - button.transform.localPosition.z), button.transform.localScale.x, button.transform.localScale.z), boton))
 
 
 
Mil gracias!! Problema resuelto... aunque todavía me falta por entender porque no coge los valores de X y Z del GameObject (valores exactos), aunque imagino que tiene que ver con la "traducción" de Vector3 a Vector2... puede ser???
 
en cualquier caso, haré un offset y asunto resuelto... de nuevo, MIL GRACIAS!!

 

Exactamente como dices es un problema de Traduccion pero no de Vector3->Vector2,
el problema esque estas traduciendo Vector3->Pixeles(Screen)
 
Me explico: Un transform puede tener decimales pero un Rect(Rectangulo de pantalla) vienen a ser pixeles de la pantalla, por lo que no puedes tener 10,3 pixeles sino que tienes 10 (No puedes "decimar" un pixel, si , esa palabra creo que no existe).
 
Y ese es tu problema que no puedes poner decimales a los pixeles.
 
Un saludo!

Visita http://www.programacionwh.com encontraras tutoriales y muchas cosas .


Tambien puedes visitar mi canal de YouTube https://www.youtube.com/channel/UClSCTn0wPN1iFjED0yaoJUA



Grande la explicación y el aporte!!!
 
Mil gracias, otra vez!!!!

Etiquetas: