如何减少统一的不透明度?

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&lt;Renderer&gt; ().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&lt;Renderer&gt; ().material.color.a = 0;

正如您在自己的问题中所述,您调用它的对象必须具有支持透明度的着色器。在 Unity5 中,当使用标准着色器时,必须将其显式设置为“透明”才能操作 alpha 值。

您还应该清楚,alpha 值是float,从0.0f1.0f,例如设置

gameObject.GetComponent<Renderer> ().material.color.a = 0.5f;

将使对象 50% 透明。

【讨论】:

嘿,当我尝试这个时,它告诉我 colora 无法更改 - 这个答案仍然是最新的吗? 根据docs.unity3d.com/ScriptReference/Color-a.html,这个字段应该是可变的,因为它是public float a;,你确定你使用的是UnityEngine.Color吗?作为一种解决方法,您还可以通过 var color = gameObject.GetComponent&lt;Renderer&gt;().material.color; var newColor = new Color(color.r, color.g, color.b, 0.5f); gameObject.GetComponent&lt;Renderer&gt;().material.color = newColor; 重新构造颜色

以上是关于如何减少统一的不透明度?的主要内容,如果未能解决你的问题,请参考以下文章

减少一个 div 中的背景图像不透明度 [重复]

如何覆盖 WPF 中父控件的不透明度?

如何设置边框的不透明度[重复]

如何更改 Qt MainWindow 的不透明度?

如何降低左右图像的不透明度?

如何使用 Javascript 获取元素的不透明度?