Noticias

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

Temas recientes

como hacer que un objeto pase de un color a otro

Iniciado por nomoregames, Febrero 10, 2020, 04:14:12 PM

Tema anterior - Siguiente tema
Febrero 10, 2020, 04:14:12 PM Ultima modificación: Febrero 11, 2020, 11:57:47 AM por nomoregames
Hola de nuevo
 
Estoy tratando de lograr que un objeto pase de negra a blanco, de forma paulatina... como un fundido
 
e probado usando Color.Lerp, pero no se si no se usarlo o que... asta ahora no me habia puesto a jugar con los colores por script, así que ignoro bastante sobre el tema.
 
¿Alguna idea?
 
Se puede hacer algo similar haciendo que se baya transparentando lentamente???
 
 

Febrero 10, 2020, 04:20:24 PM #1 Ultima modificación: Febrero 10, 2020, 07:27:42 PM por pioj
Pasa el código.
En principio 
 
 



   
      material.color = Color.Lerp(negro, blanco, time.deltatime);
   

[/quote]
 
 

Febrero 10, 2020, 07:25:32 PM #2 Ultima modificación: Febrero 10, 2020, 07:26:36 PM por pioj
Hola @nomoregames, yo creo que muchas de estas dudas que tienes son muy muy básicas. O quizá tal vez sea cómo planteas tus preguntas, porque no das mucho detalle, y entonces asumimos que no es para ningún caso concreto...
 
¿No te saldría más a cuenta mirarte primero la documentación de Unity, y algunos tutoriales de programación de C# con Unity3D, antes de ponerte a preguntar?
 
¿O buscar antes la pregunta por Google, a ver si alguien ha dado ya con la solución?

Febrero 11, 2020, 11:42:38 AM #3 Ultima modificación: Febrero 11, 2020, 08:22:48 PM por nomoregames
Ay alguna forma de hacer lo mismo pero transparentando??  E probado con lo que explicaban en otros foros pero "na de na "
 

Renderer r;
    public float y;
   
    // Update is called once per frame
    void Update()
    {
        y += 0.3f;
       
       
        this.GetComponent<MeshRenderer>().material.color = new Color(1.0f, 1.0f, 1.0f, y);
    }

 
 
 
 
 
 
 
PD; Estuve buscando por foros pero no entendía sus respuestas... 
 
tratare de currarrmelo mas antes de preguntar.

Cita de: nomoregames date=1581417758Ay alguna forma de hacer lo mismo pero transparentando??  E probado con lo que explicaban en otros foros pero "na de na "
   
   

Renderer r;
    public float y;
   
    // Update is called once per frame
    void Update()
    {
        y += 0.3f;
       
       
        this.GetComponent<MeshRenderer>().material.color = new Color(1.0f, 1.0f, 1.0f, y);
    }

   
       
   
   
       
   
   
       
   
   
      PD; Estuve buscando por foros pero no entendía sus respuestas... 
   
      tratare de currarrmelo mas antes de preguntar.
   


colorOpaco = new Color(1f,1f,1f,1f);
colorTransparente = new Color(1f,1f,1f,0.1f);
this.GetComponent<MeshRenderer>().material.color = Color.Lerp(colorOpaco, colorTransparente, time.deltaTime);

Febrero 12, 2020, 04:55:41 AM #5 Ultima modificación: Febrero 12, 2020, 04:56:30 AM por lightbug
Cita de: nomoregames date=1581347652¿Alguna idea?
   


En general es muy común que si arrancás no sepas usar los Lerp, por lo menos yo la pasé igual. El truco está en entender cómo es que se usan para lograr ese efecto de suavizado.
 
El efecto se debe a dos cosas:
 


  1.    Que el "punto a" (primer argumento) cambie cuadro a cuadro.


  2.    Debido a 1, el desplazamiento respecto del "punto a" (afectado por el tercer argumento) parece ir reduciéndose (el factor aproximadamente fijo, el desplazamiento este no lo es).


Interpolar linealmente (Lerp) es algo que todo el mundo sabe, por ejemplo si tenés un punto en a y otro en b e interpolas con un factor de t (0 a 1), tenés que el resultado c = a + (b - a) t  (creo que lo puse bien), basicamente te vas acercado en un factor t al destino. El truco está en reasignar el punto a (el item 1 anterior):
 
En vez de:
 
c <- a + (b - a) t
 
Ahora tenés:
 
a <- a + (b - a) t
 
 
 
Ahora, cuadro a cuadro vas a estar moviendo el origen, y por lo tanto el Lerp va a cambiar también. El  efecto es algo así (t = 0.25):
 
A ----------------↓---------------------------------------------- B
 
                     A--------------↓------------------------------ B
 
                                       A--------↓-------------------- B
 
                                                  A-----↓------------- B
 
 
 
El Color.Lerp hace exactamente eso, pero con floats, y considerando componente a componente.

Buenas tardes
 
Cita de: leocub58 date=1581462663colorOpaco = new Color(1f,1f,1f,1f); colorTransparente = new Color(1f,1f,1f,0.1f); this.GetComponent<MeshRenderer>().material.color = Color.Lerp(colorOpaco, colorTransparente, time.deltaTime);
   


E probado este codigo... pero sigue sin funcionar, el objeto se queda de color blanco y ya. A que crees que se debe??
 
 
 
en todo caso muchas gracias a los dos por vustras respuestas 

Si lo que queres transparentar es el material aplicado a un modelo 3d, no podes modificar el A (alpha channel) del color del material, ya que el standard surface shader es un shader opaco por defecto ("ShaderType = Opaque"), tenes que modificar el shader o crear uno que pueda transparentarse. Esto se debe a que los shaders en modo opaco cortan el dibujado de los objetos que se encuentran tras otros objetos desde la vista de la camara del juego, para acelerar el renderizado y optimizar un poco la velocidad de renderizado. Al usar un shader en modo transparencia, el engine empieza a mirar que hay detras del objeto tildado de transparente y asi puede determinar cuanto de estos objetos se ve basado en el alpha channel del material. espero haber sido claro, igual te dejo un link a un post del foro de unity en el cual tratan el tema y proponen shaders de ejemplo.
 
 
 
https://forum.unity.com/threads/transparency-with-standard-surface-shader.394551/

Nunca e trabajado con shaders... cuando puedo lo pruebo y comento

Cita de: nomoregames date=1581519690Buenas tardes
   
   
      E probado este codigo... pero sigue sin funcionar, el objeto se queda de color blanco y ya. A que crees que se debe??
   
   
       
   
   
      en todo caso muchas gracias a los dos por vustras respuestas 


lo más probable es que el material del objeto no esté en transparente.

Cita de: leocub58 date=1581600902lo más probable es que el material del objeto no esté en transparente.
   


Y como lo hago??  Miro tutoriales pero no me entero 

Cita de: nomoregames date=1581614234Y como lo hago??  Miro tutoriales pero no me entero 


pasa foto del inspector cuando seleccionas el objeto


Fijate como dice @leocub58, dentro del material tenes la opción https://docs.unity3d.com/Manual/StandardShaderMaterialParameterRenderingMode.html" rel="external nofollow">Rendering Mode que debería estar en Transparent.
 
Por otro lado si queres lograr cambiar de un color a otro pasando por su blend alpha deberias crear la lógica correspondiente. 
 



      
      
   



      
      
   


      
      
   


      
      
   


         Frame
      

         Alpha A
      

         Alpha B
      

         0%
      

         1
      

         0
      

         50%
      

         0.5
      

         0.5
      

         100%
      

         0
      

         1
      

 
 
 

Buenas noches
 
Muchas gracias francoe, leeré con mas atención sobre rendering mode, y cuando me lo empape bien veré si saco algo en limpio

Etiquetas: