2016-07-06 2 views
0

J'utilise color.lerp sur un moteur de rendu d'image-objet pour interpoler entre le jaune et le rouge en fonction des valeurs que j'ai dans un ensemble de données. Je souhaite également que la transparence des sprites dépende de la valeur afin que les valeurs les plus basses soient plus transparentes. Le color.lerp fonctionne bien mais j'ai maintenant du mal à faire dépendre les niveaux alpha du sprite de la valeur! Voici mon code à ce jour:Modification des niveaux alpha lors de l'utilisation de color.lerp dans unity5

using UnityEngine; 
using System.Collections; 

public class Intensity : MonoBehaviour { 

public float value; 
private float alpha; 

void Start() { 

    if (GetComponent<SpriteRenderer>()) { 
     SpriteRenderer r = GetComponent<SpriteRenderer>(); 
     r.color = new Color32(); 
     r.color = Color.Lerp (Color.yellow, Color.red, value/100); 
     } 

    if (GetComponent<MeshRenderer>()) { 
     MeshRenderer r = GetComponent<MeshRenderer>(); 
     Material m = r.material; 
     Color c = new Color(); 
     m.color = c; 
     alpha = Mathf.Lerp(0, 1, value/100) ; 
     c.a = alpha; 
    } 
} 

}

Toutes les idées pour faire ce travail serait grandement appréciée!

Merci, Jen

Répondre

3

Dans ce code:

Material m = r.material; 
    Color c = new Color(); 
    m.color = c; 
    alpha = Mathf.Lerp(0, 1, value/100) ; 
    c.a = alpha; 

Parce que Color est un struct, les propriétés et getset tels que Material.color sera pass by value. Cela signifie que c et m.color sont des valeurs séparées qui ne s'influencent pas mutuellement.

Vous pouvez éviter cela en assignant à m.color dernier:

Color c = Color.Lerp(newYellow, Color.red, value/100); 
c.a = Mathf.Lerp(0, 1, value/100); 
m.color = c; 

Si cela n'a pas de sens, voir si vous pouvez comprendre pourquoi cela ne fonctionnera pas:

m.color.a = 0; 

vous au lieu avoir à obtenir la valeur, faire un changement, et affecter la nouvelle valeur:

Color c = m.color; 
c.a = 0; 
m.color = c; 
+0

Merci pour l'aide! – jrogers12