Render transparent material without double occlusion

I would like to render an object that is semitransparent (in fact, the material itself is quite simple - just an unlit solid color with alpha), and I can achieve that, with this shader:

Shader "FlatMultiply" {
    Properties {
        _Color ("Main Color", Color) = (1,1,1,1)
    }
    SubShader {
        Tags { "RenderType" = "Transparent"
               "Queue" = "Transparent" }
        Pass { ColorMask 0 }
        Pass {
            Blend SrcAlpha OneMinusSrcAlpha
            ColorMask RGB
            Color [_Color]
        }
    }
}

However, when two objects with this shader go behind each other, the light is “double occluded” and it ends up more opaque. I don’t want this. Rather, I would like the light to be only once-colored. How can I achieve this effect?

Computationally, I would try to find which pixels are touching my material, then render the background, then darken those pixels I found in the first pass, but I don’t have the shader-fu necessary to pull this off. Anyone have any ideas?

EDIT: The AlphaVertexLitZ shader does the trick for the transparency problem (and I’ve incorporated the technique into the code segment above), but it is designed for a single object with a non-convex geometry. Is there a way for me to use this shader so that it applies to all objects with my material in the scene as a whole? I suppose I could achieve the effect I want by collecting all objects in the scene into one mesh and using this shader on it, but that will incur monstrous overhead, and would defeat the purpose of having separate objects. Can I specify that I want all objects to be rendered in the same pass in ShaderLab?

A surprising solution that doesn’t make any sense to me is that removing the "Queue"="Transparent" tag or more generally setting the render queue <= 2500 solves the problem. From this question, I understand that this cutoff has something to do with the sort order of the objects, but this solution is not optimal to me, because I need it to render after some projectors, so it needs at least "Queue"="Overlay" to work properly. Is there another way to force the sort order without changing the render queue?

The final code:

Shader "FlatMultiply" {
    Properties {
        _Color ("Main Color", Color) = (1,1,1,1)
    }
    SubShader {
        Pass { ColorMask 0 }
        Pass {
            Blend SrcAlpha OneMinusSrcAlpha
            Color [_Color]
        }
    }
}

I came here looking to make an effect where there’s a transparent overlay on the screen wherever the player is occluded. My player object also uses multiple meshes, so a similar effect to this may be useful for the effect asked about in the question. I eventually figured it out, but for anyone else here for the same thing, I posted how I did it on a thread in the forums.

effect example: shows an example level with tanks partially hidden behind level elements. The parts of the tanks that are occluded show through as a transparent black overlay