Jump to content
UnitySpain
Mcloud

Controlar transparencia de objetos

Recommended Posts

Buenas, 

Sigo con el RPG en 2D, me cree unos prefabs de arboles, el tronco rígido para que no lo atraviese y la copa siempre por encima con un script que controla el numero de layer por si hay varios juntos(este script es de los vídeos de Hektor profe que me parecen geniales)

Total todo va bien, pero quisiera que cuando mi personaje pasa por debajo del árbol, tal que así

Arbol.PNG

Quisiera que la copa se volviera un poco transparente y así poder ver al personaje sin problema, he puesto un collider como triguer, y detecto cuando entra y sale sin problema, pero por mas que intento cambiar la transparencia no hay manera...

Muchas gracias!!

Share this post


Link to post
Share on other sites

Hola Mcloud.

 

Es posible cambiar la opacidad, pero es algo que también depende un poco de qué shader está usando ese árbol.

Por ejemplo, entre los shaders "Standard" de unity, hay 4 opciones.

  • Sólido, el árbol no tendría opacidad (tampoco por los bordes, sería como una pegatina cuadrada). Los cambios en la transparencia no tendrían efecto alguno.
  • Cutout, me parece que es el que está usando ese árbol, esta es la transparencia binaria, de "ó es opaco, o es inivisble", pero no hay degradado ni suavizado en los bordes, si vas cambiando la transparencia, seguramente el objeto pasará de ser visible a totalmente invisible en algún punto (depende de la textura). 
  • Fade es más la transparencia tradicional, creo que es la que buscas, efectivamente cambiar el valor alpha, irá mezclando la textura del árbol con lo que haya detrás (sería como la sombra del árbol). 
  • La última es Transparent que es muy similar a Fade pero "recuerda" la textura al completo para que otros efectos se sigan aplicando incluso en las zonas con transparencia, como los reflejos en un cristal.

 

En todos ellos, se podría cambiar la transparencia en el "material", (cogido a través del componente renderer), aunque cambiar la transparencia no tiene el mismo efecto en cada shader.

https://docs.unity3d.com/ScriptReference/Material-color.html  ("color" es un vector4 que hace referencia al color del pixel  [rojo, verde, azul, alpha] , pero con los valores normalizados, es decir que sólo van de 0.0f a 1.0f).

float alphaStart = 0.0;
float alphaEnd = 1.0;
float duration = 1.0;
Renderer rend;

function Start()
{
	rend = GetComponent<Renderer> ();
}

function Update() 
{
	float lerp = Mathf.PingPong(Time.time,duration)/duration;
	renderer.material.color.a = Mathf.Lerp(alphaStart,alphaEnd,lerp);
} 


 

Edited by Antonio

Share this post


Link to post
Share on other sites

Puede ser también modificando la propiedad del color del componente SpriteRenderer (especificamente el alpha):

https://docs.unity3d.com/ScriptReference/SpriteRenderer.html

 

Share this post


Link to post
Share on other sites
On 4/21/2019 at 1:50 PM, lightbug said:

Puede ser también modificando la propiedad del color del componente SpriteRenderer (especificamente el alpha):

https://docs.unity3d.com/ScriptReference/SpriteRenderer.html

 

 

On 4/21/2019 at 12:47 PM, Antonio said:

Hola Mcloud.

 

Es posible cambiar la opacidad, pero es algo que también depende un poco de qué shader está usando ese árbol.

Por ejemplo, entre los shaders "Standard" de unity, hay 4 opciones.

  • Sólido, el árbol no tendría opacidad (tampoco por los bordes, sería como una pegatina cuadrada). Los cambios en la transparencia no tendrían efecto alguno.
  • Cutout, me parece que es el que está usando ese árbol, esta es la transparencia binaria, de "ó es opaco, o es inivisble", pero no hay degradado ni suavizado en los bordes, si vas cambiando la transparencia, seguramente el objeto pasará de ser visible a totalmente invisible en algún punto (depende de la textura). 
  • Fade es más la transparencia tradicional, creo que es la que buscas, efectivamente cambiar el valor alpha, irá mezclando la textura del árbol con lo que haya detrás (sería como la sombra del árbol). 
  • La última es Transparent que es muy similar a Fade pero "recuerda" la textura al completo para que otros efectos se sigan aplicando incluso en las zonas con transparencia, como los reflejos en un cristal.

 

En todos ellos, se podría cambiar la transparencia en el "material", (cogido a través del componente renderer), aunque cambiar la transparencia no tiene el mismo efecto en cada shader.

https://docs.unity3d.com/ScriptReference/Material-color.html  ("color" es un vector4 que hace referencia al color del pixel  [rojo, verde, azul, alpha] , pero con los valores normalizados, es decir que sólo van de 0.0f a 1.0f).


float alphaStart = 0.0;
float alphaEnd = 1.0;
float duration = 1.0;
Renderer rend;

function Start()
{
	rend = GetComponent<Renderer> ();
}

function Update() 
{
	float lerp = Mathf.PingPong(Time.time,duration)/duration;
	renderer.material.color.a = Mathf.Lerp(alphaStart,alphaEnd,lerp);
} 


 

Buenas, 

Muchísimas gracias, y disculpadme porque llevo una semana infernal en la oficina y no he podido tocar nada aun del juego, pero sera lo primero que modifique y os comento

Share this post


Link to post
Share on other sites

×
×
  • Create New...