参考链接:

https://blog.csdn.net/qq826364410/article/details/81774741

https://docs.unity3d.com/Manual/SL-MultipleProgramVariants.html

1.#pragma multi_compile MY_multi_1 MY_multi_2

定义了两个shader关键字,一个是MY_multi_1,另一个是MY_multi_2

MultiCompile.shader

 Shader "Custom/MultiCompile"
{
SubShader
{
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile MY_multi_1 MY_multi_2 #include "UnityCG.cginc" struct appdata
{
float4 vertex : POSITION;
}; struct v2f
{
float4 vertex : SV_POSITION;
}; v2f vert (appdata v)
{
v2f o;
o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
return o;
} fixed4 frag (v2f i) : SV_Target
{
fixed4 col = fixed4(, , , );
#ifdef MY_multi_1
col = fixed4(, , , );
#endif
#ifdef MY_multi_2
col = fixed4(, , , );
#endif
return col;
}
ENDCG
}
}
}

测试如下,来回按下QW,即可以看到两种颜色的切换

 using UnityEngine;

 public class MultiCompile : MonoBehaviour {

     void Update ()
{
if (Input.GetKeyDown(KeyCode.Q))
{
Shader.EnableKeyword("MY_multi_1");
Shader.DisableKeyword("MY_multi_2");
}
else if(Input.GetKeyDown(KeyCode.W))
{
Shader.EnableKeyword("MY_multi_2");
Shader.DisableKeyword("MY_multi_1");
}
}
}

2.#pragma multi_compile __ MY_multi_3

定义了一个shader关键字,MY_multi_3

MultiCompile2.shader

 Shader "Custom/MultiCompile2"
{
SubShader
{
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile __ MY_multi_3 #include "UnityCG.cginc" struct appdata
{
float4 vertex : POSITION;
}; struct v2f
{
float4 vertex : SV_POSITION;
}; v2f vert (appdata v)
{
v2f o;
o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
return o;
} fixed4 frag (v2f i) : SV_Target
{
fixed4 col = fixed4(, , , );
#ifdef MY_multi_3
col = fixed4(, , , );
#endif
return col;
}
ENDCG
}
}
}

测试如下,来回按下ER,即可以看到两种颜色的切换

 using UnityEngine;

 public class MultiCompile2 : MonoBehaviour {

     void Update ()
{
if (Input.GetKeyDown(KeyCode.E))
{
Shader.EnableKeyword("MY_multi_3");
}
else if (Input.GetKeyDown(KeyCode.R))
{
Shader.DisableKeyword("MY_multi_3");
}
}
}

[UnityShader基础]06.#pragma multi_compile的更多相关文章

  1. javaSE基础06

    javaSE基础06 一.匿名对象 没有名字的对象,叫做匿名对象. 1.2匿名对象的使用注意点: 1.我们一般不会用匿名对象给属性赋值的,无法获取属性值(现阶段只能设置和拿到一个属性值.只能调用一次方 ...

  2. javascript基础06

      javascript基础06 splice var del_arr = del.splice(0,2); //删除从指定位置deletePos开始的指定数量deleteCount的元素,数组形式返 ...

  3. [UnityShader基础]08.UI-Default.shader

    参考链接: https://zhuanlan.zhihu.com/p/32561155 https://blog.csdn.net/WuShangLZ/article/details/80401441 ...

  4. [UnityShader基础]07.MaterialPropertyDrawer

    参考链接: https://blog.csdn.net/e295166319/article/details/60141677 https://docs.unity3d.com/ScriptRefer ...

  5. Flask基础(06)-->视图常用逻辑

    Flask基础(06)-->视图常用逻辑 返回json 重定向:url_for 自定义状态码 返回json:在使用 Flask 写一个接口时候需要给客户端返回 JSON 数据,在 Flask 中 ...

  6. [UnityShader基础]03.透明度混合

    如果要渲染半透明物体,那么就需要用到透明度混合. 需要注意的有这几点: 1.设置标签:Tags { "Queue"="Transparent" "Ig ...

  7. PHP语言基础06 MySql By ACReaper

    上篇介绍了如用PHP连接上MySql进行,并进行sql语句的执行.但是我们没有介绍,如何输出处理的结果,如何获得处理的结果. 这里要先说明Mysql有两种查询处理模式,一种是有缓冲的查询处理模式,一种 ...

  8. [UnityShader基础]05.模板测试

    参考链接: https://blog.csdn.net/u011047171/article/details/46928463 https://blog.csdn.net/JohnBlu/articl ...

  9. [UnityShader基础]04.ColorMask

    语法如下: ColorMask RGB | A | 0 | 其他R,G,B,A的组合 ColorMask R,意思是输出颜色中只有R通道会被写入 ColorMask 0,意思是不会输出任何颜色 默认值 ...

随机推荐

  1. Lucene分词详解

    分词和查询都是以词项为基本单位,词项是词条化的结果.在Lucene中分词主要依靠Analyzer类解析实现.Analyzer类是一个抽象类,分词的具体规则是由子类实现的,所以对于不同的语言规则,要有不 ...

  2. Matlab 2017b遇到绘图低级错误

    解决方案: 命令窗口中输入:opengl('save','software') 回车 重启软件

  3. unity 常用插件 3

    一.   遮罩插件   Alpha Mask UI Sprites Quads 1.51 介绍:功能感觉很强大的一个遮罩插件,能实现LOGO高光闪动动画,圆形遮罩,透明通道图片遮罩,还真是项目必备. ...

  4. PyCharm设置仿sublime配色__Py版本2018.3.5

    效果图: 导出settings 模板为: 1.https://files.cnblogs.com/files/xier/PyCharm_settings.zip 2.https://files.cnb ...

  5. node环境下express路由,

    1.基本路由概念 路由是指确定应用程序如何响应对特定端点的客户端请求,该请求是URI(或路径)和特定HTTP请求方法(GET,POST等). 每个路由都可以有一个或多个处理函数,这些函数在路由匹配时执 ...

  6. steam商店正式支持RMB直接结算

    前两天看到新闻, 想不到这么快: http://tech.sina.com.cn/s/2015-10-26/doc-ifxizwsm2369244.shtml 今天登陆steam发现标价已经成了RMB ...

  7. 前端基础:canvas概述

    1:并不是所有的浏览器都支持canvas,若是不支持则浏览器会弹出 <canvas>Update your browser to enjoy canvas</canvas> 浏 ...

  8. Linux----------nfs服务器的搭建及常识

    一.nfs简介 nfs(network file system)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源. nfs主要适用用linu ...

  9. 导出excel,并将数据返回给前端(包含权限判断)

    一.先写导出按钮接口 1.此接口对用户权限进行判断 2.此接口将前端的参数组合拼凑到下一个接口的url中去,用于条件筛选 3.用户有权限的情况下将用户的权限信息保存到redis中去,并将token写到 ...

  10. 我发起了一个 用 javascript 写一个 Office 的 开源项目 JS Office

    用   js  写   Office,  说实在的,  把 现在已有的 各种 富文本编辑器 和 电子表格 js 库 收集起来 整合一下 就 差不多了 , 放到 前几天 那个 “  js 作为 一等公民 ...