Noticias

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

cambiar color de GameObject con UI slider

Iniciado por chessjose, Julio 29, 2017, 09:20:59 PM

Tema anterior - Siguiente tema
Julio 29, 2017, 09:20:59 PM Ultima modificación: Agosto 01, 2017, 12:30:41 AM por pioj
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!

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.

Julio 29, 2017, 11:58:06 PM #2 Ultima modificación: Julio 30, 2017, 12:00:21 AM por chessjose
Cita de: lightbug date=1501364067Hola 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
 


   
eature=oembed" width="480">

 
 

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
 
 

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.

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
         
         
         
       
    }
}

 
 

ostras muchísimas gracias aun hay cosas que no hemos tocado!! y esa es una de ellas!! 

Etiquetas: