0

我在精灵渲染器上使用 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;
    }
}

}

任何使这项工作的想法将不胜感激!

谢谢你,珍

4

1 回答 1

3

在这段代码中:

    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都将按值传递。这意味着cm.color是不相互影响的单独值。

您可以通过分配给m.colorlast 来避免这种情况:

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;
于 2016-07-06T14:57:56.383 回答