在 Unity5 中使用 Color.lerp 时更改 Alpha 级别

本文关键字:Alpha 级别 lerp Color Unity5 | 更新日期: 2023-09-27 17:55:26

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

}

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

谢谢珍

在 Unity5 中使用 Color.lerp 时更改 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)都将按值传递。这意味着cm.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;