主要参考:
一、新建一个Shader和一个Material
Shader "Custom/Multi_Compile" {
SubShader {
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile MY_multi_1 MY_multi_2 //告诉Unity编译两个不同版本的Shader
#include "UnityCG.cginc"
struct vertOut {
float4 pos:SV_POSITION;
};
vertOut vert(appdata_base v)
{
vertOut o;
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
return o;
}
float4 frag(vertOut i):COLOR
{
float4 c = float4(0, 0, 0, 0);
#ifdef MY_multi_1
c = float4(0, 1, 0, 0);//输出绿色
#endif
#ifdef MY_multi_2
c = float4(0, 0, 1, 0);//输出蓝色
#endif
return c;
}
ENDCG
}
}
FallBack "Diffuse"
}
二、新建个Cube, 挂上脚本Multi_Compile.cs
using UnityEngine;
using System.Collections;
public class Multi_Compile : MonoBehaviour {
public bool multi_1;
// Use this for initialization
void Start () {
if (multi_1) {
Shader.EnableKeyword ("MY_multi_1");
Shader.DisableKeyword ("MY_multi_2");
} else {
Shader.EnableKeyword ("MY_multi_2");
Shader.DisableKeyword ("MY_multi_1");
}
}
}