web-dev-qa-db-ja.com

一体感で不透明度を下げるにはどうすればよいですか?

私はこの主題をスタックオーバーフローで見ていますが、それは誤りだと思います。オブジェクトを「透明」にして見えないようにすることは、物事を行うための最も効率的な方法ではありません。むしろやりたいのは、レンダラーを表示したくないときは非アクティブにし、表示したいときはアクティブにすることです。

エディターでgameObjectをクリックすると、コンポーネントの1つとしてメッシュレンダラーが表示されます。

この同じgameObjectに添付されたスクリプトから非アクティブに設定するには、これを行うことができます...

gameObject.GetComponent<Renderer> ().enabled = false;

本当に透明度を使用したい場合は、これを行うことができます...

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

透明度を設定する場合でも、マテリアルが使用しているシェーダーが透明度をサポートしていることを確認する必要があります。レガシーシェーダー/透明拡散シェーダーの使用をお勧めします。

使用方法:

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

それでもこの質問に出くわすかもしれない人にとって、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");
3
thefreeline

使用方法:

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

自分の質問ですでに述べたように、これを呼び出すオブジェクトには、透明度をサポートするシェーダーが必要です。 Unity5では、標準のシェーダーを使用する場合、アルファ値を操作できるようにするには、明示的に「透明」に設定する必要があります。 enter image description here

また、アルファ値がfloatであり0.0fから1.0fになることも明らかです。たとえば、設定

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

オブジェクトを50%透明にします。

1