| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- Shader "Custom/FixedStartWave"
- {
- Properties
- {
- _Amplitude("Amplitude", Float) = 0.5
- _WaveLength("Wave Length", Float) = 1.0 // 控制波长(单位宽度)
- //_Frequency("Frequency", Float) = 6 // 波数,控制波长
- _Speed("Wave Speed", Float) = 1
- //_TimeValue("Time", Float) = 0
- _AnchorX("Anchor X", Float) = 0
- _MainTex("Texture", 2D) = "white" {}
- }
- SubShader
- {
- Tags { "RenderType" = "Opaque" }
- Pass
- {
- CGPROGRAM
- #pragma vertex vert
- #pragma fragment frag
- #include "UnityCG.cginc"
- struct appdata
- {
- float4 vertex : POSITION;
- float2 uv : TEXCOORD0;
- };
- struct v2f
- {
- float4 vertex : SV_POSITION;
- float2 uv : TEXCOORD0;
- };
- float _Amplitude;
- float _WaveLength;
- float _Speed;
- float _AnchorX;
- sampler2D _MainTex;
- v2f vert(appdata v)
- {
- v2f o;
- float x = v.vertex.x;
- //float relativeX = x - _AnchorX;
- // 波动值
- //float wavePhase = _Frequency * relativeX - _Speed * _TimeValue;
- float relativeX = v.vertex.x - _AnchorX;
- float wavePhase = (2 * UNITY_PI * relativeX / _WaveLength) - _Speed * _Time.y;
- //float wavePhase = _Frequency * relativeX - _Speed * _Time.y;
- float yOffset = _Amplitude * sin(wavePhase);
- // 起点偏移,确保锚点y=0固定
- //float anchorOffset = _Amplitude * sin(-_Speed * _TimeValue);
- float anchorOffset = _Amplitude * sin((2 * UNITY_PI * 0 / _WaveLength) - _Speed * _Time.y);
- //float anchorOffset = _Amplitude * sin(-_Speed * _Time.y);
- v.vertex.y += yOffset - anchorOffset;
- o.vertex = UnityObjectToClipPos(v.vertex);
- o.uv = v.uv;
- return o;
- }
- fixed4 frag(v2f i) : SV_Target
- {
- return tex2D(_MainTex, i.uv);
- }
- ENDCG
- }
- }
- }
|