【问题标题】:Lerp the alpha value of a colorLerp 颜色的 alpha 值
【发布时间】:2017-05-12 19:08:32
【问题描述】:

我想来回改变一种颜色的 alpha 值(透明度):

private void Awake()
{
    material =  gameObject.GetComponent<Renderer>().material;   
    oColor   = material.color; // the alpha here is 0
    nColor   = material.color;
    nColor.a = 255f;
}
private void Update()
{
    material.color = Color.Lerp(oColor, nColor, Mathf.PingPong(Time.time, 1));
}

这样不行,颜色瞬间变成白色,一直闪烁原来的颜色。我正在关注this

【问题讨论】:

  • 为什么你认为它不应该是即时的?
  • 确保使用透明着色器。
  • 我正在使用透明着色器。

标签: c# unity3d colors lerp


【解决方案1】:

事实上,Materialalpha 颜色从 0 变为 255,但是 C# 中的这些值是从 0 到 1,使 1 等于 255。这是我前段时间做的一个脚本,也许你可以用一下:

public class Blink : MonoBehaviour 
{
    public Material m;
    private Color c;
    private float a = .5f;
    private bool goingUp;

    private void Start()
    {
        c = m.color;
        goingUp = true;
    }
    private void Update()
    {
        c.a = goingUp ? .03f + c.a : c.a - .03f;

        if (c.a >= 1f) 
            goingUp = false;
        else if (c.a <= 00)
            goingUp = true;

        m.color = c;
    }
}

【讨论】:

  • 我注意到我已经硬编码了 .03f 的速度,如有必要,您可以将其设为变量并进行相应的调整。
  • 当然,这个特定的脚本会导致每帧创建一个新的实例化材质。建议改用Material Property Block
  • 什么?但我从不在更新中说新的
  • 不,你没有,但是当你修改材质的属性时会发生这种情况:Unity 会自动为你克隆它。
  • 有很多方法可以绕过它,但是对于没有创建新实例的“实例化”材质(例如,具有相同 基础材质,但颜色不同的 12 个对象),MPB 是一种方式去。只是想把那条注释扔出去,因为直接修改材料确实有效,但可能会对某些未来的读者产生性能影响。
【解决方案2】:

你可以试试这个:

void FixedUpdate ()
{
    material.color = new Color (0f, 0.5f, 1f, Mathf.PingPong(Time.time, 1));
}

这里的颜色是蓝色,(RGB 0, 128, 255) "Mathf.PingPong(Time.time, 1) 处理 alpha。

当您在检查器中将材质“渲染模式”设置为“透明”时,效果完全可见:)

注意:

  • 使用“透明”渲染模式会使对象在 alpha 层下降到 0 时变得透明,

  • 使用“淡入淡出”渲染模式会使对象在 Alpha 层降至 0 时变得完全不可见。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-26
    相关资源
    最近更新 更多