Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: Sylar en Marzo 30, 2016, 04:44:44 PM

Título: Button y GameObject
Publicado por: Sylar en Marzo 30, 2016, 04:44:44 PM
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. 
Título: Button y GameObject
Publicado por: Caesar en Marzo 30, 2016, 05:28:30 PM
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
Título: Button y GameObject
Publicado por: Sylar en Marzo 30, 2016, 05:50:44 PM
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
Título: Button y GameObject
Publicado por: Sylar en Abril 01, 2016, 12:32:07 PM
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??
Título: Button y GameObject
Publicado por: Braltor en Abril 01, 2016, 01:50:32 PM
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"
Título: Button y GameObject
Publicado por: Caesar en Abril 01, 2016, 02:37:29 PM
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.
Título: Button y GameObject
Publicado por: Sylar en Abril 01, 2016, 02:56:40 PM
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. 
Título: Button y GameObject
Publicado por: Caesar en Abril 01, 2016, 03:01:59 PM
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
Título: Button y GameObject
Publicado por: Sylar en Abril 01, 2016, 03:20:24 PM
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  
Título: Button y GameObject
Publicado por: Caesar en Abril 01, 2016, 03:51:44 PM
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
Título: Button y GameObject
Publicado por: Sylar en Abril 01, 2016, 04:53:48 PM
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.
Título: Button y GameObject
Publicado por: Caesar en Abril 01, 2016, 05:03:37 PM
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;


}
 
Título: Button y GameObject
Publicado por: Sylar en Abril 01, 2016, 07:05:53 PM
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.