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!
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!
Grande la explicación y el aporte!!!
Mil gracias, otra vez!!!!