如何减少统一的不透明度?
Posted
技术标签:
【中文标题】如何减少统一的不透明度?【英文标题】:How can I decrease opacity in unity? 【发布时间】:2015-12-01 15:28:07 【问题描述】:我在堆栈溢出中看到这个主题,但我认为这是错误的 使对象“透明”以使其无法被看到并不是最有效的做事方式。您更愿意做的是让渲染器在您不想看到时处于非活动状态,而在您看到时处于活动状态。
如果您在编辑器中单击gameObject
,则应该有一个网格渲染器作为组件之一。
要从附加到同一 gameObject
的脚本中将其设置为非活动状态,您可以这样做...
gameObject.GetComponent<Renderer> ().enabled = false;
如果你真的想使用透明度,你可以这样做......
gameObject.GetComponent<Renderer> ().material.color.a = 0;
虽然如果您要设置透明度,您需要确保材质使用的着色器支持透明度。我建议使用 Legacy Shaders/Transparent Diffuse 着色器。
如何使用:
gameObject.GetComponent<Renderer> ().material.color.a = 0;
【问题讨论】:
【参考方案1】:-
选择您的材质并将其渲染模式更改为
Transparent
。
然后,添加以下脚本。
使用 UnityEngine;
公共类 MakeTransparent : MonoBehaviour 公共游戏对象当前游戏对象; public float alpha = 0.5f;//半透明
void Start()
currentGameObject = gameObject;
void Update()
ChangeAlpha(currentGameObject.GetComponent<Renderer>().material, alpha);
void ChangeAlpha(Material mat, float alphaVal)
Color oldColor = mat.color;
Color newColor = new Color(oldColor.r, oldColor.g, oldColor.b, alphaVal);
mat.SetColor("_Color", newColor);
在运行时更改检查器中的 alpha 值。
这里是video explanation。
【讨论】:
【参考方案2】:这样试试
var other : GameObject;
other.renderer.material.color.a = 0.5f; // 50 % transparent
other.renderer.material.color.a = 1.0f; // 100% visible
【讨论】:
【参考方案3】:对于那些可能仍然遇到这个问题的人,gameObject.GetComponent<Renderer> ().material.color
不是一个变量。像这样创建一个变量:
var trans = 0.5f;
var col = gameObject.GetComponent<Renderer> ().material.color;
然后分配你的值:
col.a = trans;
另外请注意,并非所有着色器都具有_Color
属性。就我而言,我不得不使用:
var col = gameObject.GetComponent<Renderer> ().material.GetColor("_TintColor");
【讨论】:
【参考方案4】:如何使用:
gameObject.GetComponent<Renderer> ().material.color.a = 0;
正如您在自己的问题中所述,您调用它的对象必须具有支持透明度的着色器。在 Unity5 中,当使用标准着色器时,必须将其显式设置为“透明”才能操作 alpha 值。
您还应该清楚,alpha 值是float
,从0.0f
到1.0f
,例如设置
gameObject.GetComponent<Renderer> ().material.color.a = 0.5f;
将使对象 50% 透明。
【讨论】:
嘿,当我尝试这个时,它告诉我color
的 a
无法更改 - 这个答案仍然是最新的吗?
根据docs.unity3d.com/ScriptReference/Color-a.html,这个字段应该是可变的,因为它是public float a;
,你确定你使用的是UnityEngine.Color
吗?作为一种解决方法,您还可以通过 var color = gameObject.GetComponent<Renderer>().material.color; var newColor = new Color(color.r, color.g, color.b, 0.5f); gameObject.GetComponent<Renderer>().material.color = newColor;
重新构造颜色以上是关于如何减少统一的不透明度?的主要内容,如果未能解决你的问题,请参考以下文章