はじめに
ランタイム上で不透明なマテリアルを半透明に切り替える方法についてメモを残します。
スクリプト
// ベースシェーダのサーフェスタイプを透明に設定
material.SetFloat("_Surface", 1);
// デフォルトのレンダータイプタグを 'Transparent' に上書き
material.SetOverrideTag("RenderType", "Transparent");
// マテリアルのレンダーキューを透明に設定
material.renderQueue = (int)RenderQueue.Transparent;
// ソースブレンドを SrcAlpha に設定
material.SetInt("_SrcBlend", (int)BlendMode.SrcAlpha);
// ディスティネーションブレンドを OneMinusSrcAlpha に設定
material.SetInt("_DstBlend", (int)BlendMode.OneMinusSrcAlpha);
// Zライトを 0 に設定
material.SetInt("_ZWrite", 0);
// アルファテスト無効
material.DisableKeyword("_ALPHATEST_ON");
// アルファブレンド有効
material.EnableKeyword("_ALPHABLEND_ON");
// アルファプレマルチプライ無効
material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
// マテリアルの色を取得
var color = material.color;
// 色のアルファ値設定
color.a = アルファ値(0〜1f);
// マテリアル色更新
material.color = color;