1

I am trying to make my player visible as a certain color behind walls in unity, here is the shader I have :

Shader "N3K/Player"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _Color("BehindWallColor",Color) = (0,0,0,0)
    }
    SubShader
    {
        Tags {"Queue"="Transparent"}
        LOD 100
        Pass
        {
            Cull Off
            ZWrite Off
            ZTest Always
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
            };

            struct v2f
            {
                float4 vertex : SV_POSITION;
            };

            float4 _Color;

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

            fixed4 frag (v2f i) : SV_Target
            {
                // sample the texture
                return _Color;
            }

            ENDCG
        }
        Pass
        {
            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;
            float4 _MainTex_ST;

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

            fixed4 frag (v2f i) : SV_Target
            {
                // sample the texture
                fixed4 col = tex2D(_MainTex, i.uv);
                return col;
            }
            ENDCG
        }
    }
}

this works but the object has no shadow now as ig it is semi transparent, is there any other way to do this while also making the object cast shadows? and how can I specify which objects is the player rendered behind and which are not?

Iyad
  • 73
  • 5
  • https://www.youtube.com/watch?v=szsWx9IQVDI –  Sep 09 '22 at 09:17
  • but that requires light weight render pipeline and I cant seem to find it in the package manager – Iyad Sep 09 '22 at 12:22
  • It's now known as the _Universal Render Pipeline_ (URP) –  Sep 09 '22 at 22:32
  • Does this help? (It might be in standard render piepline) https://stackoverflow.com/questions/57267289/how-to-make-3d-object-visible-behind-wall-but-invisible-if-behind-wall-and-unde – gbe Sep 09 '22 at 23:20
  • I can import URP into my project is there anyway to do it without importing it, as when I import it all my materials turn purple and I cant find the update all materials in this scene button I tried everything but it won't work – Iyad Sep 10 '22 at 07:54
  • @Iyad I found this on google: Open your Project in Unity, and go to **Edit> Render Pipeline> Universal Render Pipeline**. According to your needs, select either Upgrade Project Materials to URP Materialsor Upgrade Selected Materials to URP Materials. Note:These changes cannot be undone. Backup your Project before you upgrade it. Link: https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@7.1/manual/upgrading-your-shaders.html#:~:text=Open%20your%20Project%20in%20Unity%2C%20and%20go%20to,undone.%20Backup%20your%20Project%20before%20you%20upgrade%20it.?adlt=strict& – gbe Sep 10 '22 at 17:04
  • I dont want to import urp I fixed the materials issue but it makes my game look dull – Iyad Sep 11 '22 at 12:51

0 Answers0