Jump to content
UnitySpain
Sign in to follow this  
nomoregames

ANSWERED como hacer que un objeto pase de un color a otro

Recommended Posts

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

 

Share this post


Link to post
Share on other sites

Pasa el código.
En principio 
 

Quote

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

 

Edited by pioj
por favor, usa el <> o el comment para pegar código.

Share this post


Link to post
Share on other sites

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?

Share this post


Link to post
Share on other sites

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... :7_sweat_smile:

tratare de currarrmelo mas antes de preguntar.

Share this post


Link to post
Share on other sites
12 hours ago, nomoregames said:

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... :7_sweat_smile:

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);

Share this post


Link to post
Share on other sites
On 2/10/2020 at 12:14 PM, nomoregames said:

¿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.

Edited by lightbug

Share this post


Link to post
Share on other sites

Buenas tardes

15 hours ago, leocub58 said:

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);

E probado este codigo... pero sigue sin funcionar:7_sweat_smile:, 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 :96_ok_hand:

Share this post


Link to post
Share on other sites

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/

Share this post


Link to post
Share on other sites
22 hours ago, nomoregames said:

Buenas tardes

E probado este codigo... pero sigue sin funcionar:7_sweat_smile:, 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 :96_ok_hand:

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

Share this post


Link to post
Share on other sites

Fijate como dice @leocub58, dentro del material tenes la opción 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

 

 

Share this post


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

×
×
  • Create New...