- 投稿日:2021-06-03T01:48:11+09:00
【小ネタ】Universal Render Pipeline/UnlitシェーダのSurfaceModeをスクリプトからTransparentに変更する方法
動的にMaterialを作成した後で、半透明化する設定方法が、調べてもなかなか見つからなかったので、メモしておきます。 マテリアル作成csファイルの一部 material = new Material (Shader.Find ("Universal Render Pipeline/Unlit")); material.SetFloat("_Surface", (float)BaseShaderGUI.SurfaceType.Transparent); BaseShaderGUI.SetupMaterialBlendMode(material); //<-これが大事! BaseShaderGUI.SetupMaterialBlendMode()を呼ばないと所定のBlandModeなどの設定が適用されないのでご注意。 ただ、BaseShaderGUIはUnityEditor用なのでEditorではない環境に向けては、BaseShaderGUI.SetupMaterialBlendMode()の中身を引っ張てくる必要が有ります。 という事で、Runtimeで行いたい場合はこちら。 material = new Material(Shader.Find("Universal Render Pipeline/Unlit")); // Alpha Blend material.SetFloat("_SrcBlend", (float)UnityEngine.Rendering.BlendMode.SrcAlpha); material.SetFloat("_DstBlend", (float)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); material.DisableKeyword("_ALPHAPREMULTIPLY_ON"); // General Transparent Material Settings material.SetOverrideTag("RenderType", "Transparent"); material.SetFloat("_ZWrite", 0.0f); material.renderQueue = (int)RenderQueue.Transparent; material.renderQueue += material.HasProperty("_QueueOffset") ? (int)material.GetFloat("_QueueOffset") : 0; material.SetShaderPassEnabled("ShadowCaster", false); AlphaBlend以外のブレンディングが必要な場合は、別途切り替える必要が有りますが、まぁそこはBaseShaderGUI.SetupMaterialBlendMode()を見た方が早いということで。。