Colored Lights on a Light/Shadow Only Shader

Welp. This is the last problem I’ve been having with lighting in my game…

The following shader is what I use to make geometry “invisible”, but still take light and shadows. It works, but only partially: colored light sources still appear as white on the surface, and they don’t vary according to intensity of the light (unless the intensity is 0).

I will love you forever if you can fix it. And maybe I can send you a free copy of the game when it’s done, I don’t know if that’s allowed. >.>

Here’s the Unity shader code:

Shader "Custom/Matte Shadow" {
     
    Properties {
        _Color ("Main Color", Color) = (1,1,1,1)
        _MainTex ("Base (RGB) Trans (A)", 2D) = "white" {}
        _Cutoff ("Alpha cutoff", Range(0,1)) = 0.5
    }
     
    SubShader {
        Tags {"Queue"="AlphaTest" "RenderType"="TransparentCutout"}
        LOD 200
        Blend Zero SrcColor
		Offset 0, -1
     
    CGPROGRAM
     
    #pragma surface surf ShadowOnly alphatest:_Cutoff fullforwardshadows
          
    fixed4 _Color;
     
    struct Input {
        float2 uv_MainTex;
    };
     
    inline fixed4 LightingShadowOnly (SurfaceOutput s, fixed3 lightDir, fixed atten) {
        fixed4 c;
		
        c.rgb = s.Albedo*atten;
        c.a = s.Alpha;
        return c;
    }
     
    void surf (Input IN, inout SurfaceOutput o) {
        fixed4 c = _Color;
		o.Albedo = c.rgb;
        o.Alpha = 1.0f;
    }
    ENDCG
    }
    Fallback "Transparent/Cutout/VertexLit"
}

I hope you’ve solved your problem already, but I just ran into the same thing, as I was using the exact same shader you posted and then tried using colored lights.

After some searching I found http://forum.unity3d.com/threads/cg-shader-light-color.151535/, and with some experimenting figured that the following works for me: replace line 34:

fixed4 c = _Color;

With

fixed4 c = _LightColor0 + _LightColor0 * _Color;

That seems to give me proper results. At first I just tried adding the two colors (_LightColor0 + _Color) but then the lights are too bright. Multiplying them makes everything darker. This, to me, looks exactly right.

If someone can chip in as to why/how this works, I’d be interested!