效果:
先讲下思路:
1、使用sin函数,改变顶点位置
2、将靠近栏杆的地方,设置不动,远离栏杆的地方震动较大
```csharp
Shader "YW/VertAniFlag"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_Color("Main Color",Color) = (1,1,1,1)
_Frequence ("frequence",Float) = 1
_Amplitude ("amplitude",Float) = 1
_Speed ("speed",Float) = 1
}
SubShader
{
Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" }
Pass
{
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
uniform half4 _Color;
uniform sampler2D _MainTex;
uniform float4 _MainTex_ST;
uniform float _Frequence;
uniform float _Amplitude;
uniform float _Speed;
struct vertexInput
{
float4 vertex : POSITION;
float4 texcoord : TEXCOORD0;
};
struct vertexOutput
{
float4 texcoord : TEXCOORD0;
float4 pos : SV_POSITION;
};
float4 vertFlagAni(float4 vertex,float2 uv)
{
vertex.y = vertex.y + sin((uv.x - _Time.y * _Speed) * _Frequence) * (uv.x * _Amplitude) ;
return vertex;
}
vertexOutput vert (vertexInput v)
{
vertexOutput o;
v.vertex = vertFlagAni(v.vertex, v.texcoord.xy);
o.pos = UnityObjectToClipPos(v.vertex);
o.texcoord.xy = v.texcoord.xy * _MainTex_ST.xy + _MainTex_ST.zw;
return o;
}
half4 frag (vertexOutput i) : COLOR
{
float4 col = tex2D(_MainTex,i.texcoord) * _Color;
return col;
}
ENDCG
}
}
}
建一个材质球,然后赋予plane即可看到效果,