Jump to content
UnitySpain
Sign in to follow this  
chessjose

cambiar color de GameObject con UI slider

Recommended Posts

soy novato en esto del unity y estoy  en un curso de creación de videojuegos y nos han pedido que hagamos que los players puedan cambiar el color de las naves con 3 slider y la verdad me he pasado un par de días buscando y no se como crearlo ha ver si me podéis echar una mano gracias!

Edited by pioj
Mensaje modificado por el Admin: Te lo he aclarado algo más :)

Share this post


Link to post
Share on other sites

Hola Jose, bienvenido, con que especificamente queres que te echemos una mano?, porque por como lo planteas queres que te lo resolvamos. Anda descomponiendo tu problemas en partes y asi lo vas a poder resolver, no hagas todo de una.

Share this post


Link to post
Share on other sites
hace 25 minutos, lightbug said:

Hola Jose, bienvenido, con que especificamente queres que te echemos una mano?, porque por como lo planteas queres que te lo resolvamos. Anda descomponiendo tu problemas en partes y asi lo vas a poder resolver, no hagas todo de una.

pues la verdad es que prefiero que me deis algunas pistas de como hacerlo.....

como bien sabrás la mayoría de los juegos tienen una pantalla de personalización de personaje y nos han pedido que sea con 3 slayers para poder cambiar el color del personaje en este caso seria una nave te pego un vídeo de lo que quiero hacer pero solo con colores que se apliquen a la nave y muchas gracias!! espero que eso sirva XD 

para ser exactos en el min 1:32 sale lo que quiero hacer xD

 

Edited by chessjose

Share this post


Link to post
Share on other sites

Claro pero la idea es que primero sepas: poner los sliders, despues tratar la informacion que los sliders te dan, (un float), luego pasar esa info a otro lugar, script o componente, y de ahi usarla para poder en este caso cambiar el color. Podrias 1 - cambiar simplemente el color sin pensar en el slider, que se yo apretando una o varias teclas, solo a modo de aprender (ya que estas en el curso), 2 - podrias imprimir el float del slider en la consola sin pensar en el color, si estas aprendiendo esta es la idea, por eso te puse de descomponer el problema, y al final los comunicas pero si no sabes hacer ni uno ni otro no tiene sentido porque no tenes certeza de donde esta el problema quizas pusiste toda la carne al asador y resulta que nunca el color se cambiaba por ejemplo.

Lo del video no es un slider, osea si queres que al mover un slider pase por distintos colores tenes que tener en claro de donde a donde va un color EJ de 0.7f a 0.8f va el verde. SI queres que el slider modifique componentes del color RGB ya es otra cosa.

saludos

 

Share this post


Link to post
Share on other sites

jejej veo que te adelantaste iba a ponerte lo que sabia hacer y lo que quería hacer de manera mas concreta,

lo que quiero hacer es un panel donde se muestre los slaiders o botones  y tener la nave abajo para que el jugador vea como se ve...

el panel y colocar los laiders como botones se como hacerlo y como juntar lo con el código ahora lo que no se ya que me falta practica es con el código que es como hacer el script.

Share this post


Link to post
Share on other sites

Aja, bueno podes crearte un script, y ponerselo a tu gameObject que tiene el slider (asegurate que tenga el componente slider) una de las ventajas de UI es el poder manejarte por eventos y no por cuadro a cuadro (Update), entonces las cosas pasan solo cuando ocurre algo, algo asi como una funcion callback. Por defecto todo slider viene con un eventTrigger llamado OnValueChanged, se llamara al metodo que eligas cada vez que muevas el slider.

A la hora de elegir debes:

  • darle al "+"(fijate que diga "the list is empty")
  • donde dice none elegi el objeto que tenga el script cambiador de color, en este caso el mismo slider, asi que arrastralo desde el Hierarchy o elegilo de la lista, es lo mismo
  • de la lista donde dice Function busca el metodo publico a llamar

Fijate tambien que tenga la opcion "whole numbers" y ponelo de ...no se... 0 a 10.

Cambiar el color de un objeto implica referenciar el meshrenderer, de ahi el material(o materiales), de ahi el shader, y de ahi la propiedad del shader, en este caso el color albedo, tene cuidado que tienen nombres especificos que ahora no recuerdo pero que estan por ahi en los manuales. Por eso te decia del tema del color, primero lo primero---> que el slider te funcione.

Si no sabes que tiene un slider o como arrancar, siempre siempre arranca por las referencias o manuales, esta todo:

https://docs.unity3d.com/ScriptReference/UI.Slider.html

te interesará "value".

en tu script:

using UnityEngine.UI	//con esto usas la UI en codigo

[RequiereComponent(typeof(Slider))]
public class blablabla....
{	
	Slider m_colorSlider;	
	
	//vas a arrastrar el GO que tiene el meshrenderer objetivo para cambiarle el color	
	public MeshRenderer m_targetRenderer;	
	
	void OnEnable()
	{
		m_colorSlider = GetComponent<Slider>();	
        //aca lo referenciaste
        //la idea es sacarle el valor del slider (float)
	}
       
    //este metodo publico lo vas a llamar desde el evento UI del slider 
    public void CambiarColor()
    {
		//dependiendo del valor del slider (0,1,2,...,10) vas a elegir el color
          if(m_colorSlider.value == 0)
          {
          	//cambiar a rojo
          }else if(m_colorSlider.value == 1){
          	//cambiar a verde
          }else if....
          
          
       	//solo a modo de prueba imprimi el valor del slider para ver si anda todo
        Debug.Log("El valor actual es : " + m_colorSlider.value.ToString());
          
          //si anda en lo unico que te tenes que enfocar es en la parte del color, lo del shader que te puse arriba
          
          
          
        
    }
}

 

Share this post


Link to post
Share on other sites
Sign in to follow this  

×
×
  • Create New...