Noticias

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

Button y GameObject

Iniciado por Sylar, Marzo 30, 2016, 04:44:44 PM

Tema anterior - Siguiente tema
Buenas tardes.Quería cambiar el color de un objeto Button al hacer click en otro button, estoy empezando en Unity y todavía no tengo demasiada fluidez. Tengo un código que debería funcionar pero, una vez que tengo dentro de mi script el gameObject asociado con el botón correspondiente no sé como asignar ese gameObject con el objeto button que creé.
public GameObject gobutton;
public Button centralButton;
public void ChangeColour()
{
gobutton=GameObject.FindGameObjectWithTag ("Button");
¿?
centralButton.colors.normalColor=Color.green;
}
Por otra parte no sé si puedo prescindir de crear el GameObject y utilizar solo el Button pero en ese caso no sé como puedo asociar el button del script con el de la escena en sí.Agradecería que me echarais una mano en ambas preguntas, aunque con una me valga la otra me sirve para problemaas similares. Gracias de antemano. 

Tengo un código que debería funcionar pero, una vez que tengo dentro de mi script el gameObject asociado con el botón correspondiente no sé como asignar ese gameObject con el objeto button que creé.[/quote]Veamos aunque lo que escribes esta un poco contradictorio voy a proponer una solución presumiendo lo que estas requeriendo.
centralButton = gobutton.GetComponent <Button> ();
aca lo que haces es hacer referencia del GameObject al su componente Button.Y para responder tu segunda pregunta, si puedes referenciarlo sin tener que crear el atributo GameObject en tu script, de dos formas, la primera es creando un variable temporal GameObject.
public Button centralButton;
public void ChangeColour()
{
    GameObject gobutton = GameObject.FindGameObjectWithTag ("Button");
centralButton = gobutton.GetComponent <Button> ()
centralButton.colors.normalColor=Color.green;
}
y la otra seria darle a tu atributo centralButton la referencia directa.
public Button centralButton;
public void ChangeColour()
{
    centralButton = GameObject.FindGameObjectWithTag ("Button").GetComponent <Button> ();
centralButton.colors.normalColor=Color.green;
}
bueno esto es hablando meramente en el script, porque al crear tus atributos public puedes asignar estos desde el hierarchy y ahorrarte todo esto

Muchas gracias, me ha funcionado a la perfección. No obstante, no me funcionó el poco código que yo aporté jeje. Vamos que la línea del color no me funcionó
    centralButton = GameObject.FindGameObjectWithTag ("Button").GetComponent <Button> ();
Pero buscando en internet encontré a alguien que tenía el mismo error y lo solucionó, pongo la solución por si alguien la necesita.
 Button b = rButton.GetComponent<Button>(); 
 ColorBlock cb = b.colors;
 cb.normalColor = Color.white;
 b.colors = cb
 Gracias de nuevo Caesar

Hola de nuevo, vuelvo a tener un problema con este código, esta vez muy muy raro. Ahora mismo mi código debería cambiar de color dos botones, uno a rojo y otro a verde: 
public void ChangeColourGreen()
{

   GameObject goButton = GameObject.Find ("Button");
   centralButton = goButton.GetComponent<Button> ();
   ColorBlock cb = centralButton.colors;
   cb.normalColor = Color.green;
   centralButton.colors = cb;

   GameObject goButton2 = GameObject.Find ("Button (1)");
   centralButton = goButton2.GetComponent<Button> ();
   ColorBlock cb2 = centralButton.colors;
   cb2.normalColor = Color.red;
   centralButton.colors = cb2;


}
El caso es que, uno de los botones (Button) si que me cambia de color perfectamente, pero el otro (Button (1)) no lo hace. Lo que parece muy raro es que si selecciono el segundo objeto, el que no cambia de color, al ejecutar el juego si que se cambia el normalColor en el inspector y paso a ver la linea roja, pero en la escena el objeto sigue sin cambiar de color. Alguien sabe lo que puede estar pasando??

claro no hay ninguna condicion... no hay nada que le diga al programa que elija entre un color y otro... primero pone un color luego el otro y ahi quedabusca sobre "if-else"

Dices que en el inspector si te ha cambiado, mas en la ventana de game no se ve el color rojo, todo mientras estas en el modo play. Intenta hacerlo los cambios de color de ese button en off manualmente y serciorate que no aya algo que interrumpa la vista del color del button, tambien prueba volviendo a crear el button y finalmente reinicia tu unity.

Abril 01, 2016, 02:56:40 PM #6 Ultima modificación: Abril 01, 2016, 02:57:00 PM por Sylar
Gracias a los dos.Baltor, el cambio de color cuando se llama a ese método, es incondicional. Si te fijas son dos botones, y ambos deberían cambiar de color si o si. La condición se ha cumplido antes de llamar al método. Caesar, si lo hago sin darle al play y modifico desde el inspector el color si que se cambia, pero dándole al play se cambia en el inspector pero no en la escena. Probaré como dices a volver a crear el  botón porque el unity también lo he reiniciado. 

Si aun no esta solucionado, seria bueno que subas una imagen mostrando en el inspector el button en mención en modo play, cuando esta ocurriendo el suceso mencionado

Abril 01, 2016, 03:20:24 PM #8 Ultima modificación: Abril 01, 2016, 03:42:29 PM por Sylar
De acuerdo, he borrado las imágenes de los botones porque me las han pasado, no creo que fuera un problema enseñarlas pero eran irrelevantes, pero se puede ver como tengo seleccionado el botón inferior izquierdo y en el normal color se puso en rojo. Por cierto, una pregunta rápida de noob total. Utilizo el monoDevelop para programar mis scripts, no se puede pegar un texto sacado de fuera del editor dentro del mismo??? Porque me ahorraría bastante trabajo  

En target Graphic dice prueba (Image), este deberia ser Button (1) (Image), intenta ahi cambiar manualmente el highlighted color, pressed color, disabled color.Puedes pegar texto en el mono si esta en el formato correcto

Cierto, lo cambié antes porque un compañero me preguntó si podría ser algún problema con los paréntesis, ya está cambiado de nuevo y sigue ocurriendo lo mismo. Cambiando manualmente el color en off como en play, pero sigo teniendo el mismo problema cuando lo cambio clickando el botón. Por alguna razón se cambia en el inspector pero no en la escena. Gracias.

Lo q argumentaba era que taal vez es el highlighted color es el q se muestra porque tu mouse paso sobre el en algun momento, y este es de color blanco.
public void ChangeColourGreen()
{

   GameObject goButton = GameObject.Find ("Button");
   centralButton = goButton.GetComponent<Button> ();
   ColorBlock cb = centralButton.colors;
   cb.normalColor = Color.green;
   cb.highlightedColor = Color.green;
   centralButton.colors = cb;

   GameObject goButton2 = GameObject.Find ("Button (1)");
   centralButton = goButton2.GetComponent<Button> ();
   ColorBlock cb2 = centralButton.colors;
   cb2.normalColor = Color.red;
   cb.highlightedColor = Color.red;
   centralButton.colors = cb2;


}
 

Gracias por la ayuda.No obstante parece que esa tampoco es la causa, he añadido las lineas para modificar el hightlightedColor y continúa igual... Creo que lo mejor será empezar toda la escena de nuevo a ver si funciona porque lo revisé mil veces y juraría que el código está bien. Pero bueno guardaré esta y si alguien se le ocurre una solución que me la diga, aunque sea por amor propio xd.

Etiquetas: