Unity Spain

Mesa de ayuda => Unity3D => Scripting => Mensaje iniciado por: nomoregames en Febrero 10, 2020, 04:14:12 PM

Título: como hacer que un objeto pase de un color a otro
Publicado por: nomoregames en Febrero 10, 2020, 04:14:12 PM
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???
 
 
Título: como hacer que un objeto pase de un color a otro
Publicado por: leocub58 en Febrero 10, 2020, 04:20:24 PM
Pasa el código.
En principio 
 
 



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

[/quote]
 
 
Título: como hacer que un objeto pase de un color a otro
Publicado por: pioj en Febrero 10, 2020, 07:25:32 PM
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?
Título: como hacer que un objeto pase de un color a otro
Publicado por: nomoregames en Febrero 11, 2020, 11:42:38 AM
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.
Título: como hacer que un objeto pase de un color a otro
Publicado por: leocub58 en Febrero 12, 2020, 12:11:03 AM
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);
Título: como hacer que un objeto pase de un color a otro
Publicado por: lightbug en Febrero 12, 2020, 04:55:41 AM
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.
Título: como hacer que un objeto pase de un color a otro
Publicado por: nomoregames en Febrero 12, 2020, 04:01:30 PM
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 
Título: como hacer que un objeto pase de un color a otro
Publicado por: Pathus22 en Febrero 12, 2020, 08:31:12 PM
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/ (https://forum.unity.com/threads/transparency-with-standard-surface-shader.394551/)
Título: como hacer que un objeto pase de un color a otro
Publicado por: nomoregames en Febrero 13, 2020, 10:32:36 AM
Nunca e trabajado con shaders... cuando puedo lo pruebo y comento
Título: como hacer que un objeto pase de un color a otro
Publicado por: leocub58 en Febrero 13, 2020, 02:35:02 PM
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.
Título: como hacer que un objeto pase de un color a otro
Publicado por: nomoregames en Febrero 13, 2020, 06:17:14 PM
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 
Título: como hacer que un objeto pase de un color a otro
Publicado por: leocub58 en Febrero 13, 2020, 11:13:20 PM
Cita de: nomoregames date=1581614234Y como lo hago??  Miro tutoriales pero no me entero 


pasa foto del inspector cuando seleccionas el objeto
Título: como hacer que un objeto pase de un color a otro
Publicado por: nomoregames en Febrero 15, 2020, 02:49:25 PM
Título: como hacer que un objeto pase de un color a otro
Publicado por: francoe1 en Febrero 15, 2020, 04:00:43 PM
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
      

 
 
 
Título: como hacer que un objeto pase de un color a otro
Publicado por: nomoregames en Febrero 16, 2020, 09:06:18 PM
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
Título: como hacer que un objeto pase de un color a otro
Publicado por: iRobb en Febrero 16, 2020, 11:03:38 PM
Ahora que veo este post, ¿por qué no utilizas el gradient?  Soporta color y/o alpha con tiempo de 0f a 1f:
 
https://docs.unity3d.com/ScriptReference/Gradient.html (https://docs.unity3d.com/ScriptReference/Gradient.html)
 
 
Título: como hacer que un objeto pase de un color a otro
Publicado por: pioj en Febrero 17, 2020, 10:57:30 AM
Acabo de ver su API y es asquerosa y sospechosamente similar al AnimationCurve.  ¿Será un mal presagio?  
Título: como hacer que un objeto pase de un color a otro
Publicado por: iRobb en Febrero 17, 2020, 11:39:58 AM
Yo lo implemento para fades de colores aunque la tengo bien encapsulada y que soporte diferentes tiempos devolviendo siempre entre 0f  y 1f. Luego el value lo genero con iTween.
Título: como hacer que un objeto pase de un color a otro
Publicado por: francoe1 en Febrero 17, 2020, 01:48:16 PM
Cita de: pioj date=1581933450Acabo de ver su API y es asquerosa y sospechosamente similar al AnimationCurve.  ¿Será un mal presagio?  


Por dios, copiaron y pegaron las clases KeyFrame y AnimateCurve.... 
Título: como hacer que un objeto pase de un color a otro
Publicado por: iRobb en Febrero 17, 2020, 03:02:31 PM
Probadla! No seáis tan criticones con ella. Viva el gradient, abajo el Lerp