下面是一个使用HLSL编写的URP Shader,实现了在Unity原有的UI/Unlit/Transparent基础上,对给定材质图的左半部分和右半部分实现不同大小的缩放。

Shader "Custom/UI/Unlit/TransparentWithScale" {
    Properties {
        _MainTex ("Texture", 2D) = "white" {}
        _LeftScale ("Left Scale", Range(0, 2)) = 1
        _RightScale ("Right Scale", Range(0, 2)) = 1
    }
    SubShader {
        Tags { "RenderType"="Transparent" "Queue"="Transparent" }
        Pass {
            Cull Off
            ZWrite Off
            ZTest Always
            Blend SrcAlpha OneMinusSrcAlpha

            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"

            struct appdata {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct v2f {
                float2 uv : TEXCOORD0;
                float4 vertex : SV_POSITION;
            };

            sampler2D _MainTex;
            float _LeftScale;
            float _RightScale;

            v2f vert (appdata v) {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = v.uv;
                return o;
            }

            fixed4 frag (v2f i) : SV_Target {
                fixed4 col = tex2D(_MainTex, i.uv);
                float2 scale = float2(1, 1);
                if (i.uv.x < 0.5) {
                    scale.x = _LeftScale;
                } else {
                    scale.x = _RightScale;
                }
                col *= tex2D(_MainTex, i.uv * scale);
                return col;
            }
            ENDCG
        }
    }
}

将上述代码保存为一个名为"TransparentWithScale.shader"的文件,并将其放置在Unity项目的"Assets"文件夹或其子文件夹中。

然后,你可以在Unity的材质球中选择这个自定义的Shader,并调整"_LeftScale"和"_RightScale"属性来实现左半部分和右半部分的不同大小缩放。"_MainTex"属性用于指定材质图。

希望这可以帮助到你!

用 HLSL写一个urpshader实现这么一个功能:在Unity 原有的 UIUnlitTransparent 的基础上对给定材质图的左半部分和右半部分实现不同大小的缩放

原文地址: https://www.cveoy.top/t/topic/i9mu 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录