2.2.2 RenderWithShader方法:使用其他shader渲染
基本语法:public void RenderWithShader(Shader shader, string replacementTag);
其中参数shader为要使用的shader;replacementTag 为shader的Tag标示。
功能说明:此方法的作用是可以使用指定的shader来代替当前物体的shader渲染一帧。当replacementTag为空时会替换视口中所有物体的shader。
提示:SetReplacementShader方法与此方法功能相近,不同之处是,SetReplacementShader方法使用指定的shader来替换物体当前的shader,被替换后每一帧都会用替换的shader来渲染物体,而不是只渲染一帧,具体请查看实例演示。
实例演示:下面通过实例演示方法RenderWithShader的使用。
using UnityEngine; using System.Collections; public class RenderWithShader_ts : MonoBehaviour { bool is_use = false; void OnGUI() { if (is_use) { //使用高光shader:Specular来渲染Camera camera.RenderWithShader(Shader.Find("Specular"), "RenderType"); } if (GUI.Button(new Rect(10.0f, 10.0f, 300.0f, 45.0f), "使用RenderWithShader启用高光")) { //RenderWithShader每调用一次只渲染一帧,所以不可将其直接放到这儿 //camera.RenderWithShader(Shader.Find("Specular"), "RenderType") is_use = true; } if (GUI.Button(new Rect(10.0f, 60.0f, 300.0f, 45.0f), "使用SetReplacementShader启用高光")) { //SetReplacementShader方法用来替换已有shader,调用一次即可 camera.SetReplacementShader(Shader.Find("Specular"), "RenderType"); is_use = false; } if (GUI.Button(new Rect(10.0f, 110.0f, 300.0f, 45.0f), "关闭高光")) { //重置摄像机的shader渲染模式 camera.ResetReplacementShader(); is_use = false; } } }
在这段代码中,首先定义了一个变量is_use用来记录是否启用高光shader,如果is_use为true,则在OnGUI方法中调用方法RenderWithShader来替换已有shader,也可直接使用方法SetReplacementShader来替换已有shader。如果要关闭高光则只需重置shader即调用方法ResetReplacementShader(),并修改is_use值为false,具体显示情况请读者自行运行程序查看。
提示:方法RenderWithShader每调用一次只渲染一帧,故不可直接将其放到GUI的Button中,否则看不出效果。
本文章内容摘自图书《Unity API解析》,源码下载地址:http://www.ituring.com.cn/book/1474
————————————————
版权声明:本文为CSDN博主「宏哥的博客」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/quan2008happy/article/details/39380463