如果代码中有什么不清楚请查看以下基础知识
Shader基础知识
unity3d 中 七种坐标知识详解
适用于sprite和ugui的波浪动画shader
Shader "Custom/wave"
{
Properties
{
_MainTex ("图片", 2D) = "black" {}
_Height ("波浪高度", Range(0, 2)) = 1
_Width ("波浪密度", Range(0, 100)) = 50
_Speed ("流动速度", Range(0, 100)) = 50
}
SubShader
{
Tags { "LightMode" = "ForwardBase" }
Pass
{
CGPROGRAM
#include "UnityCG.cginc"
#include "Lighting.cginc"
#pragma vertex vert
#pragma fragment frag
sampler2D _MainTex;
float4 _MainTex_ST;
float _Height;
float _Width;
float _Speed;
struct v2f
{
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
};
//顶点着色器
v2f vert(appdata_base v)
{
v2f o;
//模型空间转裁剪空间 因为2d空间就是平面的,所以直接编辑裁剪空间即可
o.pos = UnityObjectToClipPos(v.vertex);
//TRANSFORM_TEX的作用是用顶点的uv去和贴图的tiling和offset作运算
//_MainTex_ST.xy中是tiling _MainTex_ST.zw中是offset
o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
return o;
}
// 片元着色器
fixed4 frag(v2f i) : COLOR
{
//uv坐标的y = 浪高 * sin(浪宽 * 像素uv的x + 速度 * 时间增量)
i.uv.y += sin(_Width * i.uv.x + _Time.y*_Speed) *_Height;
//计算贴图颜色和uv
return tex2D(_MainTex, i.uv);
}
ENDCG
}
}
//备用
FallBack "Diffuse"
}