zoukankan      html  css  js  c++  java
  • Unity利用UI的Mask实现对精灵Sprite的遮挡

    例如剔除掉船超出河流的一部分,实现让船只在河流之上显示。


    其实是利用UI层的Mask实现遮罩,有些不同的是Mask的图片是用Camera渲染到RenderTexture动态产生的纹理实现的。
    大概步骤如下:
    1 分层渲染,建立Mask蒙版层。
    2 河流设置为Mask层。
    3 建立Mask Camera,只渲染Mask蒙版层
    4 创建脚本MatchScreenRenderTexture,创建与窗口匹配的RenderTexture,令Mask Camera渲染到该RenderTexture中。
    5 创建脚本MaskScript,建立一个MaskShader(类似于全屏特效),令MaskCamera渲染的颜色部分背景部分透明变成不透明,即反转Alpha。
    6 建立UI Image。设置Image为窗口大小,设置使用MatchScreenRenderTexture中的蒙版纹理。
    7 添加Mask组件,令Image遮罩住船精灵的部分。

     1 Shader "Tracy/MaskShader" {  
     2     Properties{  
     3         _MainTex("Base (RGB)", 2D) = "" {}  
     4         _Background("Background Texture",2D) = ""{}  
     5     }  
     6   
     7         // Shader code pasted into all further CGPROGRAM blocks  
     8         CGINCLUDE  
     9   
    10 #include "UnityCG.cginc"  
    11   
    12     struct v2f {  
    13         float4 pos : SV_POSITION;  
    14         float2 uv : TEXCOORD0;  
    15     };  
    16       
    17     sampler2D _MainTex;//摄像机的输出画面作为纹理  
    18     sampler2D _Background;//背景  
    19     sampler2D_float _CameraDepthTexture;//没用,修改自StandardAsset的imageeffect  
    20   
    21     v2f vert(appdata_img v)  
    22     {  
    23         v2f o;  
    24         o.pos = mul(UNITY_MATRIX_MVP, v.vertex);  
    25         o.uv = v.texcoord.xy;  
    26         return o;  
    27     }  
    28   
    29     float4 frag(v2f i) : SV_Target  
    30     {  
    31         //float d = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, i.uv.xy);  
    32         //d = Linear01Depth(d);  
    33         float4 c = tex2D(_MainTex, i.uv.xy);  
    34         float4 cbg = tex2D(_Background, i.uv.xy);  
    35         return float4(cbg.r, cbg.g, cbg.b, 1 - c.a);//翻转alpha  
    36     }  
    37   
    38         ENDCG  
    39   
    40         Subshader {  
    41   
    42         Pass{  
    43             ZTest Always Cull Off ZWrite Off  
    44   
    45             CGPROGRAM  
    46 #pragma vertex vert  
    47 #pragma fragment frag  
    48             ENDCG  
    49         }  
    50     }  
    51   
    52     Fallback off  
    53   
    54 } // shader  
  • 相关阅读:
    asp.net大文件断点续传
    JS大文件上传解决方案
    B/S大文件上传解决方案
    B/S上传整个文件夹
    网页上传整个文件夹
    POJ 1068 Parencodings
    74LS85 比較器 【数字电路】
    二叉树的建立与先序,后序,中序输出
    Android 学习之 开源项目PullToRefresh的使用
    理解矩阵及谱聚类小记
  • 原文地址:https://www.cnblogs.com/AaronBlogs/p/7110198.html
Copyright © 2011-2022 走看看