内置渲染管线

Shader "SunY/C11-ScrollingBackground"
{
    Properties
    {
        _MainTex("Base Layer", 2D) = "white"{}
        _DetailTex("2nd Layer", 2D) = "white"{}
        _ScrollX("Base Scroll Speed", float) = 1
        _Scroll2X("2nd Scroll Speed", float) = 1
        _Multiplier("Layer MultipLier", float) = 1
    }

    SubShader
    {
        Pass
        {
            Tags{ "LightMode" = "ForwardBase" }

            CGPROGRAM

            #include "UnityCG.cginc"

            #pragma vertex vert
            #pragma fragment frag

            sampler2D _MainTex;
            float4 _MainTex_ST;
            sampler2D _DetailTex;
            float4 _DetailTex_ST;
            float _ScrollX;
            float _Scroll2X;
            float _Multiplier;

            struct a2v
            {
                float4 vertex : POSITION;
                float4 texcoord : TEXCOORD0;
            };

            struct v2f
            {
                float4 pos : SV_POSITION;
                float4 uv : TEXCOORD0;
            };

            v2f vert(a2v v)
            {
                v2f o;
                o.pos = UnityObjectToClipPos(v.vertex);

                o.uv.xy = TRANSFORM_TEX(v.texcoord, _MainTex).xy;
                o.uv.x += frac(_ScrollX * _Time.y);
                o.uv.zw = TRANSFORM_TEX(v.texcoord, _DetailTex);
                o.uv.z += frac(_Scroll2X * _Time.y);

                return o;
            }

            fixed4 frag(v2f i) : SV_Target
            {
                fixed4 firstColor = tex2D(_MainTex, i.uv.xy);
                fixed4 secondColor = tex2D(_DetailTex, i.uv.zw);

                fixed4 finalColor = lerp(firstColor, secondColor, secondColor.a);
                finalColor.rgb *= _Multiplier;
                return finalColor;
            }

            ENDCG
        }
    }
    
    FallBack "vertexLit"
}

URP渲染管线

Shader "SunY/C11-U-ScrollingBackground"
{
    Properties
    {
        _MainTex("Base Layer", 2D) = "white"{}
        _DetailTex("2nd Layer", 2D) = "white"{}
        _ScrollX("Base Scroll Speed", float) = 1
        _Scroll2X("2nd Scroll Speed", float) = 1
        _Multiplier("Layer MultipLier", float) = 1
    }

    SubShader
    {
        Tags { "RenderPipeline" = "UniversalPipeline" }

        Pass
        {
            Tags { "LightMode" = "UniversalForward" }

            HLSLPROGRAM

            #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"

            #pragma vertex vert
            #pragma fragment frag

            CBUFFER_START(UnityPerMaterial)
            float4 _MainTex_ST;
            float4 _DetailTex_ST;
            float _ScrollX;
            float _Scroll2X;
            float _Multiplier;
            CBUFFER_END

            TEXTURE2D(_MainTex);
            SAMPLER(sampler_MainTex);
            TEXTURE2D(_DetailTex);
            SAMPLER(sampler_DetailTex);

            struct a2v
            {
                float4 vertex : POSITION;
                float4 texcoord : TEXCOORD0;
            };

            struct v2f
            {
                float4 pos : SV_POSITION;
                float4 uv : TEXCOORD0;
            };

            v2f vert(a2v v)
            {
                v2f o;
                o.pos = TransformObjectToHClip(v.vertex);

                o.uv.xy = TRANSFORM_TEX(v.texcoord, _MainTex);
                o.uv.x += frac(_ScrollX * _Time.y);

                o.uv.zw = TRANSFORM_TEX(v.texcoord, _DetailTex);
                o.uv.z += frac(_Scroll2X * _Time.y);

                return o;
            }

            half4 frag(v2f i) : SV_Target
            {
                half4 firstColor = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv.xy);
                half4 secondColor = SAMPLE_TEXTURE2D(_DetailTex, sampler_DetailTex, i.uv.zw);

                half4 color = lerp(firstColor, secondColor, secondColor.a);

                return color;
            }

            ENDHLSL
        }
    }
}