【问题标题】:Set MaterialPropertyBlock color alpha in Unity with C#使用 C# 在 Unity 中设置 MaterialPropertyBlock 颜色 alpha
【发布时间】:2021-06-19 14:56:44
【问题描述】:

我通过设置MaterialPropertyBlock 来改变网格的颜色

mpb = new MaterialPropertyBlock();
Color color = Color.red
mpb.SetColor("_Main", color);
_meshRenderer.SetPropertyBlock(mpb);

问题是颜色以 100% 的强度应用。颜色或MaterialPropertyBlock 上没有alpha 属性。

您能否建议我如何通过 alpha 使这种颜色变化更加渐变?我想补间和淡出红色效果,而不是仅仅 100% 打开或关闭(注意:我知道我在这里没有使用补间,因为一旦我知道如何在上面设置它,我就会补间 alpha)。

更新

根据@TEEBQNE 的建议,我尝试在构造函数中设置 alpha,但即使在 0 时它也会以最大强度显示

mpb = new MaterialPropertyBlock();
Color color = new Color(0, 255, 0, 0f); // Still shows 100% color change
mpb.SetColor("_Main", color);
_meshRenderer.SetPropertyBlock(mpb);

更新

这个问题是特定于着色器的,我必须设置另一个属性(特别是 "_Color" alpha 属性)。所以我的一般回答是添加颜色 + alpha 将取决于您的特定着色器和特定的命名属性。

【问题讨论】:

  • 为什么会有 alpha 属性?作为属性的颜色可以是 rgb 或 rgba。只需将 alpha 指定为颜色的第四个浮点数。 Color newRed = new Color(1.0f, 0.0f, 0.0f, a); 然后用这种新颜色调整 alpha 浮点数并应用它。
  • 啊,所以你可以在构造函数中设置颜色,但之后不能。我会试试这个谢谢。
  • 没错。让我知道你是否能正常工作。
  • 不幸的是它不起作用,似乎完全忽略了 alpha 通道。我尝试在应用之前将 alpha 设置为 0,它仍然显示为 100% 强度。
  • 此材质使用的是哪个默认着色器?它需要在透明度通行证上。尝试不亮/透明。或者尝试编辑您当前材料的颜色albedo

标签: c# unity3d shader alpha tween


【解决方案1】:

我不熟悉您当前的着色器,但您可以将 MaterialRenderMode 更改为 Transparent 或其他透明度之一。

一旦你这样做了,当你改变纹理的Albedo alpha 通道时,alpha 将改变你的对象。

根据文档,更改 albedo 的 alpha

...如果材质的渲染模式设置为 1 则有效果 透明模式的,而不是不透明的

【讨论】:

  • 我拥有的着色器看起来是自定义的并且没有这些选项。我会在了解更多信息后跟进。到目前为止还是谢谢你
  • @Aggressor 如果您发布着色器代码,我可能会提供帮助。我也不是最好的着色器,但是一旦你知道在哪里看,将渲染通道设置为非透明模式并不太难。
  • 感谢您的提议。事实证明我需要设置一个特定的属性,但你的问题帮助我理解这个问题是我的着色器特有的,而不是你可以做的“一般”事情。
  • @Aggressor 很高兴你能弄明白!
猜你喜欢
  • 2013-04-12
  • 2017-10-22
  • 2016-09-22
  • 1970-01-01
  • 1970-01-01
  • 2015-08-15
  • 1970-01-01
  • 2015-11-17
  • 2021-10-21
相关资源
最近更新 更多