【问题标题】:How to change alpha of a Shader in Unity by code如何通过代码更改 Unity 中 Shader 的 alpha
【发布时间】:2019-09-05 15:57:23
【问题描述】:

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

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

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

【问题讨论】:

  • 寻找sharedMaterialMaterial Property Blocks,它们可以帮助您更改材质的属性,这些属性将反映在着色器中。
  • @Daniel 我写了 MyObject.GetComponent().sharedMaterial.SetFloat("color.a", 0.4f);但我想我只能设置颜色或浮点属性,而 alpha 不是这些东西,对吧?你觉得我怎么改?
  • Alpha 是一个介于 0 和 1 之间的浮点数。如果您在设置 alpha 时遇到问题,请务必记住设置标签 (Tags {"Queue"="Transparent" "RenderType"="Transparent" }) 并设置正确的混合类型 (Blend SrcAlpha OneMinusSrcAlpha ),否则你的 alpha 不会有什么不同。

标签: c# unity3d shader gameobject


【解决方案1】:

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

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

【讨论】:

  • 谢谢!但是您建议分配一种新颜色,而不是仅更改现有颜色的 alpha,对吗?
  • @Alessandro 是的!这就是我所做的,但是您可以复制原始的 r,g,b 值然后分配一个自定义值,我认为有一种方法称为 GetColor() :)
  • 谢谢,最后一个效果很好!但我不得不将颜色选项从 RGB 0-255 更改为 RGB 0-1,否则会产生奇怪的效果,就像红外视觉一样……奇怪! :D
猜你喜欢
  • 2015-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多