在 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 是一个结构,任何 getset 属性,例如 Material.color 都会 pass by value。这意味着 cm.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;