GaRv3 Geschrieben 29. Januar 2020 Melden Share Geschrieben 29. Januar 2020 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 More sharing options...
Sascha Geschrieben 29. Januar 2020 Melden Share Geschrieben 29. Januar 2020 Klingt nach einem Fall für einen Sprite Shader, der den Stencil Buffer benutzt. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
GaRv3 Geschrieben 29. Januar 2020 Autor Melden Share Geschrieben 29. Januar 2020 Oha! Hab befürchtet dass es auf Shader hinausläuft. Hast du zufällig ein verständliches Tutorial parat? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 29. Januar 2020 Melden Share Geschrieben 29. Januar 2020 Hab tatsächlich gerade zufällig genau das Richtige gefunden: https://mispy.me/unity-alpha-blending-overlap/ Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
GaRv3 Geschrieben 29. Januar 2020 Autor Melden Share Geschrieben 29. Januar 2020 Ja, sieht super aus. Jetzt muss ich nur noch die Tint Color mit Transparenz einbauen... Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
GaRv3 Geschrieben 29. Januar 2020 Autor Melden Share Geschrieben 29. Januar 2020 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 More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.