Render a object on top of another.

I have two objects in the scene.

alt text

How can I make it, that the red Object is always seen by the camera? Here, red is seen by the camera with red color.

I read somewhere, that is possible with the depth of a second camera. But I want a shader.

I found, that it must be possible with a tag in a shader like this here:

Tags { "Queue" = "Overlay" }

or with this:

Tags { "Queue" = "Geometry+1" }

But it’s not working with these tags.

Here the full shader code:

Shader "Custom/ObjectControlAxisZ" {
	Properties {
		_MainTex ("Base (RGB)", 2D) = "white" {}
	SubShader {
		Tags {  "Queue" = "Geometry+1" "RenderType"="Opaque" }
		LOD 200
		#pragma surface surf Lambert

		sampler2D _MainTex;

		struct Input {
			float2 uv_MainTex;

		void surf (Input IN, inout SurfaceOutput o) {
			half4 c = tex2D (_MainTex, IN.uv_MainTex);
			o.Albedo = c.rgb;
			o.Alpha = c.a;
	FallBack "Diffuse"

1 - In the menu: Assets → Create → Shader → Standard Surface Shader

2 - Name it AlwaysOnTop

3 - Open it and replace the content with this code

4 - In the Inspector goto your material and choose your new shader: Custom → AlwaysOnTop

You can also use transparency by changing the alpha value of the “Text Color” parameter of the material (the shader is just a modified version of the 3D Text Shader)

Shader "Custom/AlwaysOnTop" {
    Properties {
        _MainTex ("Font Texture", 2D) = "white" {}
        _Color ("Text Color", Color) = (1,1,1,1)
        _StencilComp ("Stencil Comparison", Float) = 8
        _Stencil ("Stencil ID", Float) = 0
        _StencilOp ("Stencil Operation", Float) = 0
        _StencilWriteMask ("Stencil Write Mask", Float) = 255
        _StencilReadMask ("Stencil Read Mask", Float) = 255

        _ColorMask ("Color Mask", Float) = 15

    SubShader {

            Ref [_Stencil]
            Comp [_StencilComp]
            Pass [_StencilOp] 
            ReadMask [_StencilReadMask]
            WriteMask [_StencilWriteMask]
        Lighting Off 
        Cull Off 
        ZTest Off
        ZWrite Off 
        Blend SrcAlpha OneMinusSrcAlpha
        ColorMask [_ColorMask]

            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"

            struct appdata_t {
                float4 vertex : POSITION;
                fixed4 color : COLOR;
                float2 texcoord : TEXCOORD0;

            struct v2f {
                float4 vertex : SV_POSITION;
                fixed4 color : COLOR;
                float2 texcoord : TEXCOORD0;

            sampler2D _MainTex;
            uniform float4 _MainTex_ST;
            uniform fixed4 _Color;
            v2f vert (appdata_t v)
                v2f o;
                o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
                o.color = v.color * _Color;
                o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);
                o.vertex.xy += (*float2(-1,1);
                return o;

            fixed4 frag (v2f i) : SV_Target
                fixed4 col = i.color;
                col.a *= tex2D(_MainTex, i.texcoord).a;
                clip (col.a - 0.01);
                return col;

You want the ZTest Always tag. (And possibly also ZWrite Off).

can anyone hep , i have a problem i need to solve

sprite 1 = is an overlay is in front of everything
sprite 2 = buildings, are behind the overlay
sprite 3 = stars, are behind the buildings

i want to render sprite 3 on top of sprite 1, but i want to render sprite 3 behind sprite 2 and sprite 2 must render behind sprite 1.

any Ideas :frowning: