Noticias

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

Comportamiento de los UI

Iniciado por farenhai, Abril 11, 2016, 08:09:38 PM

Tema anterior - Siguiente tema
Abril 11, 2016, 08:09:38 PM Ultima modificación: Abril 11, 2016, 08:21:59 PM por farenhai
¡Hola! Veréis: estoy absolutamente desquiciado con el comportamiento de ubicación de botones y demás historias.  Resulta que tengo un menú y un submenú. Lo que hago es cambiarlos de posición a golpe de click en el botón. El problema es que la línea que define la reubicación del submenú me da dos resultados diferentes según la coloque en la función Update o en la función dedicada (la que se activa con el botón), siendo la primera la que arroja el resultado adecuado.ahí va el código de marras. using UnityEngine;
using System.Collections;
using UnityEngine.UI;public class Menu : MonoBehaviour {     public GameObject centerScreen;
    public GameObject subMenu;
    public GameObject  subMenuOriginal;
    public Transform subMenuNew;
    public GameObject altMenu;
    public GameObject altMenuNew;
     void Start ()
    {
        altMenu.transform.position = subMenuNew.transform.position;     }    void Update ()
    {
        altMenu.transform.position = altMenuNew.transform.position;
    }    public void HideMainMenu()
            {            
//        altMenuNew.transform.position = altMenu.transform.position;
    
        centerScreen.transform.position = subMenu.transform.position;
        subMenu.transform.position = subMenuNew.transform.position;
//                altMenu.transform.position = altMenuNew.transform.position;
        }
    public void CloseMainMenu ()
    {
        subMenu.transform.position = centerScreen.transform.position;
        altMenu.transform.position = subMenuNew.transform.position;
        subMenuNew.transform.position = altMenuNew.transform.position;
        }
    }donde altMenu es el menu (conjunto de botones ) a desplazar y altMenuNew es un GO vacío que utilizo como refencia de destino (lugar de reubicación).Siendo  el resultado de  "altMenu.transform.position = altMenuNew.transform.position; " diferentes en void Update() y void CloseMainMenu() , no acabo de hallar explicación a esto y me está volviendo loco. Intuyo que la respuesta podría (¿Qué, si no?) estar relacionada con la lectura a cada frame de Update() , puesto que entiendo(en mi supina ignorancia) que es la única diferencia entre las dos funciones...(¿Estoy equivocado?) El caso es que necesito que esta línea no se esté ejecutando contínuamente: no es una función principal, sino puntual (pero que debe estar disponible, evidentemente). ¿Alguien que me pueda ayudar  entender el por qué de esta doble respuesta? ¿Qué está pasando? ¡Muchas gracias!    

El altmenu está dentro del Canvas? 

Abril 11, 2016, 08:27:06 PM #2 Ultima modificación: Abril 11, 2016, 08:28:37 PM por farenhai
Cita de: iRobb date=1460398917" data-ipsquote="" data-cite="iRobb" class="ipsQuoteEl altmenu está dentro del Canvas? 
De hecho, ambos están dentro del mismo Canvas. Como unica diferencia, están en diferentes padres, pero dentro del mismo Canvas. Ya te digo, la diferencia se da sólo con cambiar la línea de Update() a la  void HideMainMenu()Mosqueante, ¿no? PD: estoy con la versión 5.2.3.f1 ... por si sirviera de algo...

No utilices el transform.position dentro del Canvas. Utiliza el anc***dPosition que se obtiene del Componente llamado RectTransform.

Cita de: iRobb date=1460400095" data-ipsquote="" data-cite="iRobb" class="ipsQuoteNo utilices el transform.position dentro del Canvas. Utiliza el anc***dPosition que se obtiene del Componente llamado RectTransform.
Le echaré un ojo.. ¡gracias! (por hoy creo que es suficiente... menuda frustración de día ...)

El sistema UI incorpora un componente de Eventos llamado Event Trigger. Lo encontraras dentro del grupo Event de componentes.Desde este componente seleccionas el evento Drag(arrastrar) y le asocias la función de un script para mover el transform:
public class MoverPanelConClick : MonoBehaviour {

public void OnClick(){

   this.transform.Translate(Input.GetAxis("Mouse X")*5f,Input.GetAxis("Mouse Y")*5f,0f);

}

}
Luego para mover varios paneles o ventanas  a la vez, principal y secundarios, tienes que emparentarlos de forma anidada, es decir, cada uno emparentado a la ventana anterior. Por ejemplo:  MoverWindow.unitypackage

[quote author=kaito date=1460405446" data-ipsquote="" data-cite="kaito" class="ipsQuote">El sistema UI incorpora un componente de Eventos llamado Event Trigger. Lo encontraras dentro del grupo Event de componentes.Desde este componente seleccionas el evento Drag(arrastrar) y le asocias la función de un script para mover el transform:
public class MoverPanelConClick : MonoBehaviour {public void OnClick(){

   this.transform.Translate(Input.GetAxis("Mouse X")*5f,Input.GetAxis("Mouse Y")*5f,0f);

}

}
Luego para mover varios paneles o ventanas  a la vez, principal y secundarios, tienes que emparentarlos de forma anidada, es decir, cada uno emparentado a la ventana anterior. Por ejemplo:  MoverWindow.unitypackage[/quote]Respuesta de crack, Kaito. Muchas gracias. Al final he conseguido hacer lo que me proponía desde un principio (estaba teniendo un bug cuyo origen he sido capaz de localizar, pero no he conseguido darle explicación). De cualquier modo, esto me ha servido para mirarme la documentación de Eventos (había visto algunos tutos de las UI, pero veo que esto puede ser muy MUY interesante) y darme cuenta que todavía tendré que dedicarle un poco más de tiempo, que tengo mucho que escarbar. El ejemplo es estupendo y se agradece mucho el tiempo dedicado. ¡Ni te imaginas lo bien que me viene!¡Gracias!

Etiquetas: