私はこの主題をスタックオーバーフローで見ていますが、それは誤りだと思います。オブジェクトを「透明」にして見えないようにすることは、物事を行うための最も効率的な方法ではありません。むしろやりたいのは、レンダラーを表示したくないときは非アクティブにし、表示したいときはアクティブにすることです。
エディターでgameObject
をクリックすると、コンポーネントの1つとしてメッシュレンダラーが表示されます。
この同じgameObject
に添付されたスクリプトから非アクティブに設定するには、これを行うことができます...
gameObject.GetComponent<Renderer> ().enabled = false;
本当に透明度を使用したい場合は、これを行うことができます...
gameObject.GetComponent<Renderer> ().material.color.a = 0;
透明度を設定する場合でも、マテリアルが使用しているシェーダーが透明度をサポートしていることを確認する必要があります。レガシーシェーダー/透明拡散シェーダーの使用をお勧めします。
使用方法:
gameObject.GetComponent<Renderer> ().material.color.a = 0;
それでもこの質問に出くわすかもしれない人にとって、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");
使用方法:
gameObject.GetComponent<Renderer> ().material.color.a = 0;
自分の質問ですでに述べたように、これを呼び出すオブジェクトには、透明度をサポートするシェーダーが必要です。 Unity5では、標準のシェーダーを使用する場合、アルファ値を操作できるようにするには、明示的に「透明」に設定する必要があります。
また、アルファ値がfloat
であり0.0f
から1.0f
になることも明らかです。たとえば、設定
gameObject.GetComponent<Renderer> ().material.color.a = 0.5f;
オブジェクトを50%透明にします。