Unity UI不被3D物体遮挡

UI Shader:

复制代码
Shader "CustomUI/FirstImg"
{
   Properties
   {
       [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {}
       _Color("Tint", Color) = (1,1,1,1)

       //MASK SUPPORT ADD
       _StencilComp("Stencil Comparison", Float) = 8
       _Stencil("Stencil ID", Float) = 0
       _StencilOp("Stencil Operation", Float) = 0
       _StencilWriteMask("Stencil Write Mask", Float) = 255
       _StencilReadMask("Stencil Read Mask", Float) = 255
       _ColorMask("Color Mask", Float) = 15
       //MASK SUPPORT END
   }

   SubShader
   {
       Tags
       {
           "Queue" = "Overlay"
           "IgnoreProjector" = "True"
           "RenderType" = "Transparent"
           "PreviewType" = "Plane"
           "CanUseSpriteAtlas" = "True"
       }

       //MASK SUPPORT ADD
       Stencil
       {
           Ref[_Stencil]
           Comp[_StencilComp]
           Pass[_StencilOp]
           ReadMask[_StencilReadMask]
           WriteMask[_StencilWriteMask]
       }
       ColorMask[_ColorMask]
       //MASK SUPPORT END

       Cull Off
       Lighting Off
       ZWrite Off
       ZTest Always
       Fog
       {
           Mode Off
       }
       Blend SrcAlpha OneMinusSrcAlpha
       //ColorMask[_ColorMask]

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

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

           struct v2f
           {
               float4 vertex : SV_POSITION;
               fixed4 color : COLOR;
               half2 texcoord : TEXCOORD0;
           };

           fixed4 _Color;

           v2f vert(appdata_t IN)
           {
               v2f OUT;
               OUT.vertex = UnityObjectToClipPos(IN.vertex);
               OUT.texcoord = IN.texcoord;
               #ifdef UNITY_HALF_TEXEL_OFFSET
       OUT.vertex.xy += (_ScreenParams.zw - 1.0) * float2(-1,1);
               #endif
               OUT.color = IN.color * _Color;
               return OUT;
           }

           sampler2D _MainTex;

           fixed4 frag(v2f IN) : SV_Target
           {
               half4 color = tex2D(_MainTex, IN.texcoord) * IN.color;
               return color;
           }
           ENDCG
       }
   }
}

用该Shader创建一个材质,将该材质挂到不被模型遮挡的UI上。

TextMeshPro 设置:

修改TextMesh Pro/Shaders/TMP_SDF.shader

修改如下:

相关推荐
在路上看风景25 分钟前
31. Unity 异步加载的底层细节
unity
天人合一peng2 小时前
Unity中做表头时像work中整个调整宽窄
unity
会一点设计2 小时前
6个优质春节海报模板网站推荐!轻松设计马年祝福海报
ui·ux
多恩Stone2 小时前
【3D AICG 系列-6】OmniPart 训练流程梳理
人工智能·pytorch·算法·3d·aigc
hudawei99612 小时前
TweenAnimationBuilder和AnimatedBuilder两种动画的比较
flutter·ui·动画·tweenanimation·animatedbuilder
依米阳光0813 小时前
Playwright MCP AI实现自动化UI测试
ui·自动化·playwright·mcp
小李也疯狂14 小时前
Unity 中的立方体贴图(Cubemaps)
unity·游戏引擎·贴图·cubemap
牛掰是怎么形成的14 小时前
Unity材质贴图引用陷阱:包体暴涨真相
unity·材质·贴图
呆呆敲代码的小Y14 小时前
【Unity工具篇】| 超实用工具LuBan,快速上手使用
游戏·unity·游戏引擎·unity插件·luban·免费游戏·游戏配置表
EQ-雪梨蛋花汤14 小时前
【Unity优化】Unity多场景加载优化与资源释放完整指南:解决Additive加载卡顿、预热、卸载与内存释放问题
unity·游戏引擎