首页 > 解决方案 > 如何通过代码更改 Unity 中 Shader 的 alpha

问题描述

我有一个材质设置为透明的游戏对象,我想将其 alpha 更改为 80 而不是 255。但我想通过代码来完成,而不是使用编辑器滑块。有没有一种简单的方法可以仅使用一行代码来更改着色器的 alpha?就像是:

MyObject.GetComponent<Material>().shader.alpha = 80;

我浏览了互联网,发现只有更复杂的解决方案......

标签: c#unity3dshadergameobject

解决方案


我认为这应该可以解决问题:

public class SetAlpha : MonoBehaviour
{
    public Material materialWithAlphaValue;

    public void ChangeAlphaValue(Color color)
    {
        materialWithAlphaValue.SetColor("_MY_COLOR_SHADER_VARIABLE_NAME", color);
    }
}

更新:

public class SetAlpha : MonoBehaviour
{
    public Material materialWithAlphaValue;

    public void ChangeAlphaValue(float alpha)
    {
        var color = materialWithAlphaValue.GetColor("_MY_COLOR_SHADER_VARIABLE_NAME");
        materialWithAlphaValue.SetColor("_MY_COLOR_SHADER_VARIABLE_NAME", new Color(color.r, color.g, color.b, alpha));
    }
}

更新 2:

使用Material.Color与使用相同,Material.GetColor("_Color");这是标准统一着色器中基色的默认命名。

public void ChangeDefaultMatAlpha(float a)
{
    _MyMaterial.color = new Color(_MyMaterial.color.r, _MyMaterial.color.g _MyMaterial.color.b,
        a);
}

推荐阅读