【问题标题】: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;

【问题讨论】:

    标签: c# unity3d transparency opacity


    【解决方案1】:
    1. 选择您的材质并将其渲染模式更改为Transparent
    2. 然后,添加以下脚本。

      使用 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; 重新构造颜色
          猜你喜欢
          • 2017-06-20
          • 2013-03-15
          • 2012-12-16
          • 1970-01-01
          • 2013-05-13
          • 2017-07-01
          • 1970-01-01
          • 1970-01-01
          • 2013-02-05
          相关资源
          最近更新 更多