unity camera RenderWithShader ,SetReplacementShader

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

posted @ 2020-01-13 15:10  00000000O  阅读(595)  评论(0编辑  收藏  举报