Noticias

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

Temas recientes

Animación de botón al Invoukar

Iniciado por totemalf, Marzo 30, 2020, 07:04:54 PM

Tema anterior - Siguiente tema
Marzo 30, 2020, 07:04:54 PM Ultima modificación: Marzo 31, 2020, 11:16:16 PM por pioj
Buenas team,  me encuentro el siguiente problema.
 
Estoy haciendo un menu que funciona con teclado y gamepad. En principio funciona bien, pero me encuentro un problemilla:
 
Para pulsar cada botón uso una función que llamo desde el inspector con On Click () ... por defecto, On Click () se ejecuta con los Enters o con el Space, y con un mando Ps4 con el button0 que viene a ser el cuadrado. El problema viene cuando yo quiero presionar el botón del menú con la X del Pad, que es el button1; lo mapeo como PadX, lo llamo desde el script y funciona bien, peeero la imagen de boton presionado no aparece, no cambia de seleccionado a presionado. La forma en que he llamado al On Click() desde el update: 
 



   
       
   
   
       if (Input.GetButtonDown("PadX"))
              {    
                  botonActivo.onClick.Invoke();
              }
   
   
      Gracias!!!
   
   
       
   

[/quote]
 
 

Entiendo que quieres simular el click del botón. La manera de llamar al click es correcta. Lo que ocurre es que eso no afecta al componente Selectable que contiene el Button donde se realizan los cambios de sprites. Tendrás que mani***r el selectable del button tú mismo cambiando los estados del selectable:
 
https://docs.unity3d.com/2017.4/Documentation/ScriptReference/UI.Selectable.html
 
 

Marzo 30, 2020, 09:26:34 PM #2 Ultima modificación: Marzo 30, 2020, 09:28:51 PM por totemalf
Correcto, quiero simular el click. Llevo rato rondando el spriteState, transition, etc... cambiar las imagenes del selectable es fácil, lo que no termino de entender es como ponerlo en estado pressed al hacer el invoke. Poner cada botón en select es más facil, ya que se hace automaticamente al usar el método Select que selecciona todo el selectable... estoy un poco frustrado ya hoy con esta rallada, a ver si me despejo y mañana lo intento de nuevo. 
 
A unas malas siempre podría hacerlo todo a pelo con sprites y pasar de los buttons. 
 
Edit: Otra cosa que se me ocurre, existe alguna forma de simular desde el script que se ha pulsado una tecla?
 
Thx.

No es complicado. Solamente tienes que cambiar el estado vía el selectable. Mírate el enlace del selectable.

Llamadme torpe, pero no encuentro como cambiar de un estado a otro desde el script. Puedo ver en que estado se encuentra, cambiar los sprites  de los estados, y hacer cosas cuando son seleccionados o presionados, el problema es que se seleccionan o presionan desde fuera 
Cita de: totemalf date=1585596394Edit: Otra cosa que se me ocurre, existe alguna forma de simular desde el script que se ha pulsado una tecla?
   


 

La verdad que es bastante curioso como funciona el invoke. He estado haciendo pruebecillas a ver si lo termino de entender. He creado un escript que se llame cuando se clica al botón, de esta manera:
 

   void Start()
    {
        Button yo = gameObject.GetComponent<Button>();
        yo.onClick.AddListener(SaludoBoton);
       
    }
    void SaludoBoton()
    {
        print("Soy un machaco");
    }

 
Lo curioso del tema, es que cuando clico con el ratón, o con el teclado se imprime en el primer lugar de la consola, y se va haciendo el collapse bien. Pero cuando clico con el gamepad, que es el que llama al botón con el invoke, me lo imprime en una fila a parte... no lo acumula junto. A pesar de ejecutar la misma función, del mismo botón, es como si Invoke viviese en un planeta a parte.
 

Etiquetas: