您的位置:首页 > 移动开发 > Unity3D

Unity3d在runtime中改变material渲染模式

2016-04-13 17:47 471 查看
material.SetFloat("_Mode",3);

material为实例化的Material,这个顺序和inspecter看到的应该是一样的 0是Opaque 1是cutout  以此类推

用了这个发现inspecter里面模式是改变了,但是没有达到预期的效果
http://forum.unity3d.com/threads/access-rendering-mode-var-on-standard-shader-via-scripting.287002/#post-1961025
然后跑到这里 看到了这个

                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;

原来改变这个"_Mode"值并没有什么卵用

                            Color GlazingColor = new Color(0.5f, 0.5f, 0.5f,0.2f);

                           
material.SetColor("_Color", GlazingColor);

                           
material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);

                           
material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);

                           
material.SetInt("_ZWrite", 1);

                           
material.DisableKeyword("_ALPHATEST_ON");

                           
material.DisableKeyword("_ALPHABLEND_ON");

                           
material.EnableKeyword("_ALPHAPREMULTIPLY_ON");

                           
material.renderQueue = 3000;

                           
material.SetFloat("_Mode", 3);

最后这样 得到了 玻璃材质。

这里也有一篇文章,如果想要做这个的同学 可以参考一下 这位大大的:http://blog.csdn.net/zhangyukof/article/details/51141464
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息