unity让sprite随时间向外扩散shader
时间: 2023-09-15 07:20:28 浏览: 121
要使Sprite随时间向外扩散,您可以使用Shader来实现。下面是一个简单的Shader示例,它将Sprite从中心点向外扩散:
Shader "Custom/SpriteExplosion" {
Properties {
_MainTex ("Sprite Texture", 2D) = "white" {}
_Speed ("Speed", Range(-1, 1)) = 0
}
SubShader {
Tags {"Queue"="Transparent" "RenderType"="Transparent"}
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata {
float4 vertex : POSITION;
float4 color : COLOR;
float2 uv : TEXCOORD0;
};
struct v2f {
float4 vertex : SV_POSITION;
fixed4 color : COLOR;
float2 uv : TEXCOORD0;
};
sampler2D _MainTex;
float _Speed;
v2f vert (appdata v) {
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.color = v.color;
o.uv = v.uv;
return o;
}
fixed4 frag (v2f i) : SV_Target {
float2 center = float2(0.5, 0.5);
float2 offset = i.uv - center;
float dist = length(offset);
float time = _Time.y * _Speed;
float scale = 1.0 + time;
float2 newUV = center + offset * scale;
fixed4 col = tex2D(_MainTex, newUV);
col.a = i.color.a;
return col;
}
ENDCG
}
}
FallBack "Diffuse"
}
在这个Shader中,我们使用_Time.y变量来获取时间。 _Speed属性可以在Inspector中设置,以控制扩散的速度和方向。 我们将Sprite的中心点设置为(0.5, 0.5),并计算每个像素与中心点之间的距离。 然后,我们使用_Time.y和_Speed变量来计算缩放比例,然后将偏移量乘以比例并添加到中心点,以获得新的uv坐标。 最后,我们从纹理中获取新的颜色,并将alpha值设置为原始颜色的alpha值。
阅读全文