内置渲染管线
Shader "SunY/C11-ImageSequenceAnimation" { Properties { _Color ("Color Tint", Color) = (1, 1, 1, 1) _MainTex ("Image Sequence", 2D) = "white" {} _HorizontalAmount("Horizontal Amont", float) = 4 _VerticalAmount("Vertical Amount", float) = 4 _Speed("Speed", Range(1, 100)) = 30 } SubShader { Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" } Pass { Tags { "LightMode" = "ForwardBase" } ZWrite Off Blend SrcAlpha OneMinusSrcAlpha CGPROGRAM #include "UnityCG.cginc" #pragma vertex vert #pragma fragment frag fixed4 _Color; sampler2D _MainTex; float4 _MainTex_ST; float _HorizontalAmount; float _VerticalAmount; float _Speed; struct a2v { float4 vertex : POSITION; float2 texcoord : TEXCOORD0; }; struct v2f { float4 pos : SV_POSITION; float2 uv : TEXCOORD0; }; v2f vert(a2v v) { v2f o; o.pos = UnityObjectToClipPos(v.vertex); o.uv = TRANSFORM_TEX(v.texcoord, _MainTex).xy; return o; } fixed4 frag(v2f i) : SV_Target { float col = floor(_Time.y * _Speed); float row = floor(col / _VerticalAmount); half2 uv = i.uv + half2(col, -row); uv.x /= _HorizontalAmount; uv.y /= _VerticalAmount; fixed4 c = tex2D(_MainTex, uv); c.rgb *= _Color; return c; } ENDCG } } FallBack "Transparent/VertexLit" }
URP渲染管线
Shader "SunY/C11-U-ImageSequenceAnimation" { Properties { _Color ("Color Tint", Color) = (1, 1, 1, 1) _MainTex ("Image Sequence", 2D) = "white" {} _HorizontalAmount("Horizontal Amont", float) = 4 _VerticalAmount("Vertical Amount", float) = 4 _SequenceID("SequenceID", float) = 0 _Speed("PlaySpeed", Range(1, 100)) = 30 } SubShader { Tags{ "RenderType" = "Transparent" "Queue" = "Transparent" "RenderPipeline" = "UniversalPipeline" } Pass { Tags{ "LightMode" = "UniversalForward" } ZWrite Off Blend SrcAlpha OneMinusSrcAlpha HLSLPROGRAM #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" #pragma vertex vert #pragma fragment frag CBUFFER_START(UnityPerMaterial) half4 _Color; float4 _MainTex_ST; float _HorizontalAmount; float _VerticalAmount; float _SequenceID; float _Speed; CBUFFER_END TEXTURE2D(_MainTex); SAMPLER(sampler_MainTex); struct a2v { float4 vertex: POSITION; float4 texcoord: TEXCOORD0; }; struct v2f { float4 pos : SV_POSITION; float2 uv : TEXCOORD0; }; v2f vert (a2v v) { v2f o; o.pos = TransformObjectToHClip(v.vertex); o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); return o; } half4 frag (v2f i) : SV_Target { // 第一种方法 //_SequenceID = floor(_Time.y * _Speed); //float frameCount = _HorizontalAmount * _VerticalAmount; //_SequenceID = fmod(_SequenceID, frameCount); //int row = floor(_SequenceID / _VerticalAmount); //int col = fmod(_SequenceID, _VerticalAmount); //float uInterval = 1 / _VerticalAmount; //float vInterval = 1 / _HorizontalAmount; //i.uv *= float2(uInterval, vInterval); //i.uv += float2(col * uInterval, (_HorizontalAmount - 1 - row) * vInterval); //half4 color = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv); //return color; // 第二种方法 float col = floor(_Time.y * _Speed); float row = floor(col / _VerticalAmount); i.uv += half2(col, -row); i.uv.x /= _HorizontalAmount; i.uv.y /= _VerticalAmount; half4 color = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv); color.rgb *= _Color; return color; } ENDHLSL } } }
浙公网安备 33010602011771号