- Home /
Cutting hole from player character to camera through multiple sprites with edge blending
We are currently developing a 2D orthographic tile-based game in which the player can move multiple different characters around maps. Though we're using sprites, we chose to build the game using the 3D functions of Unity in order to simplify issues of depth (and partially because we originally started out using 3D models but later made the switch to 2D).
The issue that we currently face is that we would like for the player to be able to see their units at all times, regardless of how many obstacles stand between the camera and the unit itself. There would, of course, be multiple units onscreen at any given time and all should be visible in the same manner. Here's a screenshot from Wakfu illustrating the desired effect:
Our understanding is that using modified shaders would be the ideal way to go about this, but despite much searching and finding many solutions that were similar to what we were after, none of them have worked quite as we would like. It seems like a relatively simple task to accomplish but our lack of expertise in shaders is making things much harder. Part of the issue seems to lie in the requirement of edge blending on the cut-out area as this seems to mostly rule out most depth masking solutions.
For reference, the current shader we're using (since we're not sure of how many of these solutions could be adapted for use with our shader):
Shader "Custom/Unlit/Transparent" {
Properties {
_Color ("Main Color (A=Opacity)", Color) = (1,1,1,1)
_MainTex ("Base (A=Opacity)", 2D) = ""
}
Category {
Tags {"Queue"="Transparent" "IgnoreProjector"="True"}
ZWrite Off
Blend SrcAlpha OneMinusSrcAlpha
SubShader {Pass {
GLSLPROGRAM
varying mediump vec2 uv;
#ifdef VERTEX
uniform mediump vec4 _MainTex_ST;
void main() {
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
uv = gl_MultiTexCoord0.xy * _MainTex_ST.xy + _MainTex_ST.zw;
}
#endif
#ifdef FRAGMENT
uniform lowp sampler2D _MainTex;
uniform lowp vec4 _Color;
void main() {
gl_FragColor = texture2D(_MainTex, uv) * _Color;
}
#endif
ENDGLSL
}}
SubShader {Pass {
SetTexture[_MainTex] {Combine texture * constant ConstantColor[_Color]}
}}
}
}
Many thanks in advance to any kind soul who could assist us in getting on the right track!
Your answer
Follow this Question
Related Questions
See-through hole via shaders on a 2D plane 2 Answers
Custom shader of sprite results in black alpha. 0 Answers
I want to fade out this Texture Masking Shader (using Rendertextures) and I need your help 3 Answers
Rewrite simple alphamask fixed function shader to surface or cg shader 2 Answers
See-through hole/hide away walls in a 2D environment (via shader)? 0 Answers