NGUI 粒子特效裁剪

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法很简单就是给特效用的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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值