Search code examples
unity-game-enginesprite

Sprite Render with Pattern Texture ... Unity2D


I want to add a pattern Texture to the sprite Render. enter image description here

Anyone can help with that thanks


Solution

  • You can accomplish that by writing a custom shader.

    Create a new shader and add the code from down below. After that, create a material with the newly created shader, add a texture that you want to use for the pattern and add the material to your SpriteRenderer component.

    Shader source code

    Shader "Custom/TexturePattern"
    {
        Properties
        {
            [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {}
            _PatternTex("Pattern Texture", 2D) = "white" {}
            _Color("Tint", Color) = (1,1,1,1)
            [MaterialToggle] PixelSnap("Pixel snap", Float) = 0
        }
    
            SubShader
            {
                Tags
                {
                    "Queue" = "Transparent"
                    "IgnoreProjector" = "True"
                    "RenderType" = "Transparent"
                    "PreviewType" = "Plane"
                    "CanUseSpriteAtlas" = "True"
                }
    
                Cull Off
                Lighting Off
                ZWrite Off
                Blend One OneMinusSrcAlpha
    
                Pass
                {
                CGPROGRAM
                    #pragma vertex vert
                    #pragma fragment frag
                    #pragma multi_compile _ PIXELSNAP_ON
                    #include "UnityCG.cginc"
    
                    struct appdata_t
                    {
                        float4 vertex   : POSITION;
                        float4 color    : COLOR;
                        float2 texcoord : TEXCOORD0;
                    };
    
                    struct v2f
                    {
                        float4 vertex   : SV_POSITION;
                        fixed4 color : COLOR;
                        float2 texcoord  : TEXCOORD0;
                    };
    
                    fixed4 _Color;
    
                    v2f vert(appdata_t IN)
                    {
                        v2f OUT;
                        OUT.vertex = UnityObjectToClipPos(IN.vertex);
                        OUT.texcoord = IN.texcoord;
                        OUT.color = IN.color * _Color;
                        #ifdef PIXELSNAP_ON
                        OUT.vertex = UnityPixelSnap(OUT.vertex);
                        #endif
    
                        return OUT;
                    }
    
                    sampler2D _MainTex;
                    sampler2D _PatternTex;
                    sampler2D _AlphaTex;
                    float _AlphaSplitEnabled;
    
                    fixed4 SampleSpriteTexture(float2 uv)
                    {
                        fixed4 color = tex2D(_MainTex, uv);
                        fixed4 patternColor = tex2D(_PatternTex, uv);
    
                        color.r = patternColor.r;
                        color.g = patternColor.g;
                        color.b = patternColor.b;
    
    
        #if UNITY_TEXTURE_ALPHASPLIT_ALLOWED
                        if (_AlphaSplitEnabled)
                            color.a = tex2D(_AlphaTex, uv).r;
        #endif
    
                        return color;
                    }
    
                    fixed4 frag(v2f IN) : SV_Target
                    {
                        fixed4 c = SampleSpriteTexture(IN.texcoord) * IN.color;
                        c.rgb *= c.a;
                        return c;
                    }
                ENDCG
                }
            }
    }
    

    End result

    enter image description here