[C#] Changer le mode du shader Standard (Unity v5)

Cette section est destinée aux scripts partagés par la communauté. Chaque post est destiné à un script. Suivez bien les recommandations.
sotec
Messages : 542
Inscription : 21 Sep 2012 10:11

[C#] Changer le mode du shader Standard (Unity v5)

Message par sotec » 21 Avr 2015 10:40

vous avez peut être essayé de changer en run time le mode du shader standard, avec SetFloat("_Mode",0), et remarqué que le material ne se rafraichissait pas. Voilà une fonction pour le faire :

Code : Tout sélectionner

        /// <summary>
        /// Permet de changer le mode du shader standard
        /// </summary>
        /// <param name="material">le material à utiliser</param>
        /// <param name="blendMode"> le mode voulu : Opaque , Cutout, Fade, Transparent</param>
        public static void SetupMaterialWithBlendMode(Material material, string blendMode)
        {
            switch (blendMode)
            {
                case "Opaque":
                    material.SetFloat("_Mode", 0);
                    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 "Cutout":
                    material.SetFloat("_Mode", 1);
                    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 "Fade":
                    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;
                    break;
                case "Transparent":
                    material.SetFloat("_Mode", 3);
                    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;
            }
        }
J'ai trouvé le code sur un forum, mais j'ai perdu le lien ^^
┬─┬ノ(º - ºノ) - (╯°□°)╯︵ ┻━┻

Répondre

Revenir vers « Scripts »