如何减少团结的不透明度?

inf*_*ity 2 c# transparency opacity unity-game-engine

我看到这个主题堆积如山,但我认为这是错误的。将对象“透明化”,使它无法被看到并不是最有效的处理方式。您宁愿要做的就是在不想看到渲染器时使其处于非活动状态,而在看到渲染器时使其处于活动状态。

如果gameObject在编辑器中单击,则应该有一个Mesh Renderer作为组件之一。

要将其设置为从附加到此脚本的脚本无效gameObject,可以执行此操作...

gameObject.GetComponent<Renderer> ().enabled = false;
Run Code Online (Sandbox Code Playgroud)

如果您真的想使用透明度,则可以执行此操作...

gameObject.GetComponent<Renderer> ().material.color.a = 0;
Run Code Online (Sandbox Code Playgroud)

尽管如果设置透明度,则需要确保材质使用的着色器支持透明度。我建议使用“旧式”着色器/“透明漫反射”着色器。

如何使用:

gameObject.GetComponent<Renderer> ().material.color.a = 0;
Run Code Online (Sandbox Code Playgroud)

the*_*ine 5

对于那些仍然可能遇到这个问题的人来说,gameObject.GetComponent<Renderer> ().material.color这不是一个变量。这样创建一个变量:

var trans = 0.5f;
var col = gameObject.GetComponent<Renderer> ().material.color;
Run Code Online (Sandbox Code Playgroud)

然后分配您的值:

col.a = trans;
Run Code Online (Sandbox Code Playgroud)

另请注意,并非所有着色器都具有_Color属性。就我而言,我必须使用:

var col = gameObject.GetComponent<Renderer> ().material.GetColor("_TintColor");
Run Code Online (Sandbox Code Playgroud)


小智 -4

尝试用这种方法

var other : GameObject;
other.renderer.material.color.a = 0.5f; // 50 % transparent
other.renderer.material.color.a = 1.0f; // 100% visible
Run Code Online (Sandbox Code Playgroud)