欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

Unity在运行时(代码中)设置材质的渲染模式(RenderingMode)

发布时间:2024/8/23 39 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Unity在运行时(代码中)设置材质的渲染模式(RenderingMode) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

Unity中,有些少数情况下我们需要用代码来创建材质。比如说在材质非常多,而仅仅是纹理不一样的时候。

而用代码创建的材质是没有对应的资源文件的,我们也就无法使用Inspector来设置它的Rendering Mode。

 

关于Rendering Mode,许我稍作介绍:

材质(Material)的属性检视面板(Inspector)里的第一项为渲染模式(RenderingMode)

渲染模式总共有四种:

渲染模式

意思

适用对象举例

说明

Opaque

不透明

石头

适用于所有的不透明的物体

Cutout

镂空

破布

透明度不是0%就是100%,不存在半透明的区域。

Fade

隐现

物体隐去

Transparent的区别为高光反射会随着透明度而消失。

Transparent

透明

玻璃

适用于像彩色玻璃一样的半透明物体,高光反射不会随透明而消失。

 

有时候我们需要在程序代码(Script)中设置材质的渲染模式,这时候我们该怎么做呢?这时候可以通过添加以下代码来实现。

public enum RenderingMode {Opaque,Cutout,Fade,Transparent, }public static void SetMaterialRenderingMode (Material material, RenderingMode renderingMode) {switch (renderingMode) {case RenderingMode.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 RenderingMode.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 RenderingMode.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 RenderingMode.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;} }

使用方法:

void Start () {// 设置材质的颜色为半透明的颜色才能看到效果,如果材质有贴图,那么贴图也必须是半透明的GetComponent<MeshRenderer> ().material.color = new Color (1, 0, 0, 0.5f);SetMaterialRenderingMode (GetComponent<MeshRenderer> ().material, RenderingMode.Transparent); }

注意:测试前先在目标物体后放置一个其他物体,如果未添加代码前不可以看到后面物体,而添加之后可以了,那么就表示此代码设置RenderingMode成功。

成功和不成功的结果是这样的:

End

http://www.rainier.net.cn/cpys/xnfzsyl/lxl/20160331175407

总结

以上是生活随笔为你收集整理的Unity在运行时(代码中)设置材质的渲染模式(RenderingMode)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。