如何降低统一的不透明度?

时间:2015-09-05 16:53:51

标签: c# unity3d transparency opacity

我在堆栈中看到这个主题,但我认为这是错误的 使对象“透明”以便无法看到它并不是最有效的方法。你想要做的是让渲染器在你不想看到它时处于非活动状态,并在你这样做时激活。

如果在编辑器中单击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;

4 个答案:

答案 0 :(得分:4)

对于那些可能仍会遇到此问题的人,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");

答案 1 :(得分:1)

  

我如何使用:

     

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

正如您在自己的问题中所说,您调用它的对象必须有一个支持透明度的着色器。在Unity5中,使用标准着色器时,必须将其明确设置为&#34; Transparent&#34;能够操纵alpha值。 enter image description here

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

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

将使对象50%透明。

答案 2 :(得分:0)

  1. 选择材料并将其渲染模式更改为Transparent
  2. 然后,添加以下脚本。

    使用UnityEngine;

    公共类MakeTransparent:MonoBehaviour { 公共GameObject currentGameObject; 公众持股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

答案 3 :(得分:-2)

尝试这种方式

var other : GameObject;
other.renderer.material.color.a = 0.5f; // 50 % transparent
other.renderer.material.color.a = 1.0f; // 100% visible