我在精灵渲染器上使用color.lerp,根据数据集中的值在黄色和红色之间进行插值。我还希望精灵的透明度取决于值,因此较低的值将更加透明。color.lerp 工作正常,但我现在无法让精灵的 alpha 级别也依赖于该值!这是我到目前为止的代码:
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;
}
}
}
任何使这项工作的想法将不胜感激!
谢谢珍
在此代码中:
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
)都将按值传递。这意味着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;