2016-07-06 9 views
0

Я использую color.lerp на рендерере спрайтов для интерполирования между желтым и красным на основе значений, которые у меня есть в наборе данных. Я также хочу, чтобы прозрачность спрайтов зависела от значения, поэтому более низкие значения будут более прозрачными. Color.lerp отлично работает, но теперь у меня проблемы с тем, чтобы альфа-уровни спрайта зависели от значения! Вот мой код до сих пор:изменение уровня альфа при использовании color.lerp в единстве5

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

}

Любые идеи, чтобы сделать эту работу было бы весьма признателен!

Спасибо, Джен

ответ

3

В этом коде:

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

Поскольку Color является структурой, любые get и set свойства, такие как Material.color воли pass by value. Это означает, что c и m.color являются отдельными значениями, которые не влияют друг на друга.

Вы можете избежать этого путем присвоения m.color последнего:

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

Если это не имеет смысла, если вы можете понять, почему это не будет работать:

m.color.a = 0; 

Вы вместо должны получить значение, внести изменения и присвоить новое значение:

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

Спасибо за помощь! – jrogers12