方法很简单就是给特效用的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----
return o;
}
fixed4 frag( v2f i ) : COLOR {
//新增,判断顶点坐标是否在裁剪框内
bool inArea = i.wo

本文介绍了如何使用NGUI进行粒子特效的裁剪,关键在于修改shader以接受裁剪区域参数,并在顶点和片段着色器中判断是否在裁剪区域内,超出则设为透明。通过获取物体材质球并计算裁剪空间,结合UIPanel的clipRange和UIRoot的属性进行调整。需要注意UIRoot的缩放值计算和面板相对于UIRoot的偏移量处理。
最低0.47元/天 解锁文章
1148

被折叠的 条评论
为什么被折叠?



