I have two objects in the scene.

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
CGPROGRAM
#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;
}
ENDCG
}
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 {
Tags
{
"Queue"="Transparent"
"IgnoreProjector"="True"
"RenderType"="Transparent"
"PreviewType"="Plane"
}
Stencil
{
Ref [_Stencil]
Comp [_StencilComp]
Pass [_StencilOp]
ReadMask [_StencilReadMask]
WriteMask [_StencilWriteMask]
}
Lighting Off
Cull Off
ZTest Off
ZWrite Off
Blend SrcAlpha OneMinusSrcAlpha
ColorMask [_ColorMask]
Pass
{
CGPROGRAM
#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);
#ifdef UNITY_HALF_TEXEL_OFFSET
o.vertex.xy += (_ScreenParams.zw-1.0)*float2(-1,1);
#endif
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;
}
ENDCG
}
}
}
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 