Jump to content
Unity Insider Forum

Semitransparente Sprite Renderer gegenseitig maskieren?


GaRv3

Recommended Posts

Hallo zusammen,

ich arbeite gerade an einem Hex-basierten Game und möchte einen halbtransparenten Layer über einige Tiles legen.
Im Grunde sind es einfach nur Sprites, die über einige Tiles gelegt werden.

Allerdings gibt es je nach Zoomstufe Probleme mit den Kanten, an denen die Sprites sich berühren. Entweder bleiben einzelne Pixel frei oder die Sprites überlappen sich.
Letzteres wäre für mich okay, wenn die Sprites sich nicht aufgrund ihrer Transparenz addieren würden.

Daher meine Frage:
Kann ich die Sprite Renderer irgendwie so konfigurieren, dass sie sich gegenseitig maskieren, also nicht übereinander dargestellt werden können?
Sie liegen auf unterschiedlichen Objekten, haben aber alle identische Sorting Layer und Order in Layer.

 

Vielen Dank und besten Gruß
GaRv3

Link zu diesem Kommentar
Auf anderen Seiten teilen

Okay, hab den Shader umgeschrieben und er unterstützt jetzt auch Tint Color und Transparenz.

Vielen Dank für den Link!

Für alle, die es interessiert, hier der Shader:

Shader "Sprites/Fog of War"
{
	Properties{
		_MainTex("Base (RGB)", 2D) = "white" {}
		_Color("Tint", Color) = (1,1,1,1)
	}

	SubShader{
		Tags { "Queue" = "Transparent" }

		Pass {
			Stencil {
				Ref 2
				Comp NotEqual
				Pass Replace
			}

			Blend SrcAlpha OneMinusSrcAlpha

			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag
			#include "UnityCG.cginc"

			uniform sampler2D _MainTex;

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

			struct v2f {
				half4 pos : POSITION;
				fixed4 color : COLOR;
				half2 uv : TEXCOORD0;
			};

			fixed4 _Color;

			v2f vert(appdata_t v) {
				v2f o;
				o.pos = UnityObjectToClipPos(v.vertex);
				o.color = v.color * _Color;
				half2 uv = MultiplyUV(UNITY_MATRIX_TEXTURE0, v.texcoord);
				o.uv = uv;
				return o;
			}

			half4 frag(v2f i) : COLOR{
				half4 color = tex2D(_MainTex, i.uv) * i.color;
				if (color.a < 0.3)
					discard;
				color.rgb *= color.a;
				return color;
			}
				
			ENDCG
		}

	}

	Fallback off
}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...