在 unity5 中使用 color.lerp 时更改 alpha 级别
changing alpha levels while using color.lerp in unity5
我在 sprite 渲染器上使用 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
都会 pass by value。这意味着 c
和 m.color
是独立的值,不会相互影响。
您可以通过分配给 m.color
last:
来避免这种情况
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;
我在 sprite 渲染器上使用 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
都会 pass by value。这意味着 c
和 m.color
是独立的值,不会相互影响。
您可以通过分配给 m.color
last:
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;