c# - 如何通过代码更改 Unity 中 Shader 的 alpha
问题描述
我有一个材质设置为透明的游戏对象,我想将其 alpha 更改为 80 而不是 255。但我想通过代码来完成,而不是使用编辑器滑块。有没有一种简单的方法可以仅使用一行代码来更改着色器的 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);
}
推荐阅读
- r - CaTools 中的 Sample.split
- excel - 进行更改时如何突出显示 Exel 黄色中的一行和红色单元格(不止一次更改)
- mongodb - Union 2 表就像它是单个实体,然后排序、跳过和限制 (Mongoose)
- node.js - Axios - 等待所有响应运行 .then 块
- apache-spark - 派生 Spark SQL 中的分区数
- firebase - 限制谁可以在没有 Firestore 规则或 Firebase 身份验证的情况下获取实时文档更新
- powershell - 使用 Powershell 编辑本地组策略
- python - 从逗号分隔的单词序列中以排序形式打印唯一单词
- php - 使用 PDO 处理 PHP 中的 MySQL 错误 1104
- java - Java 从隐藏在用户点击后面的网站中抓取数据?