- Home /
change material rendering mode, but don't update material seems in scene at runtime
Hello, i am using Unity 5.0.0f4,i add a cube in scene and create "door" material in resources folder. i set that material rendering mode is Opaque with unity inspector, I attach cube to a "door" material, added the script, i want to change transparency existing material with script. when run code, material rendering mode is transparent but doesn't anything material in scene at runtime. not update material's perspective at runtime. Still material seems to be opaque in scene How can i change materials transparency at runtime?
Here's some sample code
using UnityEngine;
using System.Collections;
public class Transparency : MonoBehaviour {
Material doorMat;
// Use this for initialization
void Start () {
doorMat= Resources.Load ("Door") as Material;
doorMat.SetFloat ("_Mode", 3);
doorMat.color = new Color(1,0,0,0.4f);
}
// Update is called once per frame
void Update () {
}
}
Answer by amiel_ace · Aug 16, 2015 at 01:26 AM
Aside from that, you also need to add this:
material.SetFloat("_Mode", 2);
material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
material.SetInt("_ZWrite", 0);
material.DisableKeyword("_ALPHATEST_ON");
material.EnableKeyword("_ALPHABLEND_ON");
material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
material.renderQueue = 3000;
Answer by dappledore · Dec 15, 2015 at 08:58 AM
Thought i would just add to this ,for resetting back, to include all modes from (Editor/StandardShaderGUI.cs) taken from here
public static void SetupMaterialWithBlendMode(Material material, BlendMode blendMode)
{
switch (blendMode)
{
case BlendMode.Opaque:
material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);
material.SetInt("_ZWrite", 1);
material.DisableKeyword("_ALPHATEST_ON");
material.DisableKeyword("_ALPHABLEND_ON");
material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
material.renderQueue = -1;
break;
case BlendMode.Cutout:
material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);
material.SetInt("_ZWrite", 1);
material.EnableKeyword("_ALPHATEST_ON");
material.DisableKeyword("_ALPHABLEND_ON");
material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
material.renderQueue = 2450;
break;
case BlendMode.Fade:
material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
material.SetInt("_ZWrite", 0);
material.DisableKeyword("_ALPHATEST_ON");
material.EnableKeyword("_ALPHABLEND_ON");
material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
material.renderQueue = 3000;
break;
case BlendMode.Transparent:
material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
material.SetInt("_ZWrite", 0);
material.DisableKeyword("_ALPHATEST_ON");
material.DisableKeyword("_ALPHABLEND_ON");
material.EnableKeyword("_ALPHAPREMULTIPLY_ON");
material.renderQueue = 3000;
break;
}
Your answer
Follow this Question
Related Questions
Boat wake/foam 0 Answers
Way to prevent material instantiation for fading alpha 0 Answers
Changing font material alpha for just one clone 0 Answers
Projector - blob shadow. How to change the material's alpha channel C# 2 Answers
Shader is ignoring alpha 1 Answer