Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
  • Help Room /
avatar image
0
Question by Lazybones94 · Nov 04, 2015 at 12:57 PM · shaders

Hide part of a sprite that is under another sprite(or part of UI under gameobject). Help with shaders

Hello everyone. I want to make one game object to become partially invisible when its under another game object. I use Unity 5.2.

For example. I have two sprites: car A and car B. When car B is over car A, both of them must become transparent in the parts they intersect. Here is what I want: alt text

I googled and found some similiar questions. But, unfortunately, most of them are outdated. The only one working almost fine is here: http://answers.unity3d.com/questions/787137/sprite-masking.html BUT! When I try to use this shader(standard unlit shader with changed tags: queue set to +2 and render type to transparent):

 Shader "Unlit/TransparencyShader"
 {
     Properties
     {
         _MainTex ("Texture", 2D) = "white" {}
     }
     SubShader
     {
         Tags 
         { 
             "Queue" = "Transparent+2"
             "RenderType" = "Transparent"
         }
         LOD 100
 
         Pass
         {
             CGPROGRAM
             #pragma vertex vert
             #pragma fragment frag
             // make fog work
             #pragma multi_compile_fog
             
             #include "UnityCG.cginc"
 
             struct appdata
             {
                 float4 vertex : POSITION;
                 float2 uv : TEXCOORD0;
             };
 
             struct v2f
             {
                 float2 uv : TEXCOORD0;
                 UNITY_FOG_COORDS(1)
                 float4 vertex : SV_POSITION;
             };
 
             sampler2D _MainTex;
             float4 _MainTex_ST;
             
             v2f vert (appdata v)
             {
                 v2f o;
                 o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
                 o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                 UNITY_TRANSFER_FOG(o,o.vertex);
                 return o;
             }
             
             fixed4 frag (v2f i) : SV_Target
             {
                 // sample the texture
                 fixed4 col = tex2D(_MainTex, i.uv);
                 // apply fog
                 UNITY_APPLY_FOG(i.fogCoord, col);                
                 return col;
             }
             ENDCG
         }
     }
 }

with this shader that I took from the question I linked:

 Shader "Custom/MaskTest" {
 
     Properties
     {
         _MainTex("Base (RGB) Alpha (A)", 2D) = "white" {}
     _Cutoff("Base Alpha cutoff", Range(0,.9)) = .5
     }
 
         SubShader{
         Tags{ "Queue" = "Transparent+1" }
         Offset 0, -1
         ColorMask 0
         ZWrite On
         Pass
     {
         AlphaTest Greater[_Cutoff]
         SetTexture[_MainTex]{
         combine texture * primary, texture
     }
     }
     }
 }

Here is what I get: alt text

In Scene window it works just as I need, but in Game window the second sprite always has the colour of skybox. Can somebody tell me what am I doing wrong? Besides, I need to still render the objects behind those two sprites, like in the first picture, the backgound must be rendered, not just empty, but with help of this shader background is not drawn(in scene window). And another very important question: will I be able to use this method to hide a part of UI element behind a 3d game object(line renderer)? Or at least between two UI elements? Thanks!

123123.png (203.0 kB)
123123123123.png (300.5 kB)
Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

1 Reply

· Add your reply
  • Sort: 
avatar image
0

Answer by Lazybones94 · Nov 04, 2015 at 03:23 PM

I figured that the problem was simply that there was no background for it. I just added a background ui image(these shaders work fine with UI) and used standard Mobile/Unlit shader for it.

Comment
Add comment · Show 1 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image Mike_MG · Feb 24, 2019 at 10:18 PM 0
Share

Could you post the full solution along with the shader code and some tips how to implement that? I'm working on shadow casting system to a fully 2D isometric game and need a thing like that, but unfortunately I'm not into shaders... Thanks!

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

32 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

GL QUADS are being painted with the wrong color 0 Answers

Get UV warped texture as another texture 0 Answers

Receive Shadow Mesh Renderer - Weird Effect 0 Answers

Tilemap Shader Glitch 0 Answers

HDRP and UMMORPG server 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges