c# - 如何通过代码更改 Unity 中着色器的 alpha

标签 c# unity3d shader gameobject

我有一个 Material 设置为透明的游戏对象,我想将其 alpha 更改为 80 而不是 255。 但我想通过代码来完成,而不是使用编辑器 slider 。 是否有一种仅使用一行代码来更改着色器的 alpha 的简单方法? 像这样的东西:

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

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

最佳答案

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

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);
}

关于c# - 如何通过代码更改 Unity 中着色器的 alpha,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57809180/

相关文章:

android - 如何从 Unity Player 返回到之前运行的 Android Activity?

android - Unity GAv4 插件 - LogScreen 不可见,LogEvent 可见

c# - 使物体朝某个方向加速

glsl - 如何在 GLSL 片段着色器中获得相对于法线的视角?

c# - C# 中的 C++ Armadillo 代码

c# - 有没有办法显示向上滑动面板,当用户向上滑动时显示更多数据?

c# - 如何使用 native corert 预览进行构建?

javascript - 只有第一个调用适用于具有相同顶点缓冲区的多个drawElements调用

c# - Unity - 2D 着色器/光照,如 Terraria 或 Starbound

c# - 如何从UserControl1 WPF MVVM中的按钮将数据从一个UserControl1传递到UserControl2