在上一节简单的学习了.Queue标签的使用,本节将学习RenderType标签。
“RenderType”标签。
Unity内置的RenderType包括:
(1)”Opaque”:绝大部分不透明的物体都使用这个;
(2)”Transparent”:绝大部分透明的物体、包括粒子特效都使用这个;
(3)”Background”:天空盒都使用这个;
(4)”Overlay”:GUI、镜头光晕都使用这个;
Unity可以运行时替换符合特定RenderType的所有Shader。主要通过Camera.RenderWithShader或者Camera.SetReplacementShader配合使用。
1.RenderWithShader与SetReplacementShader的使用可以参考
网址http://www.ceeger.com/Components/SL-ShaderReplacement.html。
例子:打开lessen6目录下的2.scene,场景有cube1,cube2两个物体,这两个物体分别使用的材质,shader为cube1,cube1,cube2,cube2.然后用replace这个对cube1,和cube2物体所使用的shader进行替换。
主要是通过以下代码实现:
Shader s = Shader.Find ("Custom/replace");
cam.SetReplacementShader (replace, "RenderType");因为shader cube1的rendertype = cube1(红色),而replace shader(黑色)的rendertype = cube2(绿色)因此,cube1不渲染,cube2的shader替换为replace shader。因此cube2显示黑色,如下图所示:
如果要经cube1渲染出来,如何处理呢,在replace shader里加一个rendertype =”cube1”的subshader
添加后replace代码如下
运行效果如下:
2. RenderWithShader与SetReplacementShader的区别是RenderWithShader是当前帧用指定的shader渲染,SetReplacementShader是替换后的每一帧用指定的shader渲染。
当把代码SetReplacementShader换成RenderWithShader发现没什么效果,主要是因为RenderWithShader是当前帧用指定的shader渲染,要与SetReplacementShader同样的效果,必须每帧都调用RenderWithShader。注意必须在OnGUI函数里调用。
其他标签:
1.”ForceNoShadowCasting”,值为”true”时,表示不接受阴影。
2.”IgnoreProjector”,值为”true”时,表示不接受Projector组件的投影。
Unity 开发交流QQ群:528152133