Noticias

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

[SOLUCIONADO] Convertir posición 3D a posición en Canvas

Iniciado por Braltor, Abril 14, 2016, 07:09:34 PM

Tema anterior - Siguiente tema
Abril 14, 2016, 07:09:34 PM Ultima modificación: Abril 14, 2016, 09:47:33 PM por Braltor
Hola amigos, estoy intentando colocar un texto de puntaje sobre un objeto en 3D, usando el UI.Supuse que RectTransformUtility.ScreenPointToLocalPointInRectangle me daría la posición pero parece ser más complicado. Me explico:Tengo areaInterfaz que es el RectTransform del canvas. El canvas tiene activos: Screen Space - Overlay, y Scale with Scree Size. Recibo la posición en pantalla de un Camera.main.WorldToScreenPoint(transform.position). El control con el puntaje tiene anchor botton-left. Entonces se instancia, se emparenta al canvas y se posiciona al centro de la coordenada transformada: 
   public void CreaPuntos(
   Vector2 pp)   // posición en pantalla
{
   // Crea y agrega.
   GameObject p1 = Instantiate(puntos);
   p1.transform.SetParent(areaInterfaz.transform);

   // Posiciona.
   Vector2 ps;   // posición
   RectTransformUtility.ScreenPointToLocalPointInRectangle(areaInterfaz, pp, Camera.main, out ps);
   RectTransform a = p1.GetComponent<RectTransform>();
   a.position = new Vector3(a.rect.width / 2 - ps.x, a.rect.height / 2 - ps.y);
}

Sin embargo no queda en la posición correcta, y al cambiar la resolución no parece haber una relación con el tamaño del canvas. ¿Alguna idea de qué puede faltar? ¿O una mejor formar de hacerlo?Por cierto que el orden de la resta en la ultima línea logra que quede sobre el canvas, y no al lado contrario fuera de la pantalla. Y la distancia al punto correcto varía mucho respecto a las dimensiones del control, entonces no creo que el problema sea esa operación, sino la conversión.

SOLUCIONADO, usando esta extensión: http://answers.unity3d.com/answers/931269/view.htmlUna pena que no haya algo así en la API, y que el método del RectTransformUtility no haga lo que por lógica uno esperaría... pero bueno.

Yo me lo he solucionado en algunas situaciones del anchor (todas no las necesito) pero reconozco que es más sencilla y elegante la del enlace.Realmente una función así debería estar de cabecera, ya que el p* UI 4.6 ha sido un dolor de cabeza para mí mucho tiempo. Ahora ya es igual, pero los novatos deberían pegarle un ojo.


Etiquetas: