方法很简单就是给特效用的shader中传入一个裁剪区域,然后在shader中做判断是否在裁剪空间内,要是出了就把颜色设为透明.
废话不多说,直接上代码:
Shader "AngryBots/FX/AdditiveClip" {
Properties {
_MainTex ("Base", 2D) = "white" {}
_TintColor ("TintColor", Color) = (1.0, 1.0, 1.0, 1.0)
//新增 记录裁剪框的四个边界的值
_Area ("Area", Vector) = (0,0,1,1)
//----end---
}
CGINCLUDE
#include "UnityCG.cginc"
sampler2D _MainTex;
fixed4 _TintColor;
half4 _MainTex_ST;
//新增,对应上面的_Area
float4 _Area;
//----end----
struct v2f {
half4 pos : SV_POSITION;
half2 uv : TEXCOORD0;
//新增,记录顶点的世界坐标
float2 worldPos : TEXCOORD1;
//----end----
};
v2f vert(appdata_full v) {
v2f o;
o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
o.uv.xy = TRANSFORM_TEX(v.texcoord, _MainTex);
//新增,计算顶点的世界坐标
o.worldPos = mul(_Object2World, v.vertex).xy;
//----end----