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

修改如下:

相关推荐
EliseL1 小时前
SuperMap iClient3D for WebGL 如何实时汇报相机位置天气情况
javascript·3d·html·webgl
电子云与长程纠缠1 小时前
Godot学习04 - UI界面
学习·ui·godot
qq1315306242 小时前
Unity 渲染优化核心总结(Draw Call / SetPass / Batch 全体系)
unity·游戏引擎·batch
美团骑手阿豪3 小时前
C#语法:HashSet与List对比,适合场景
unity·c#
云和数据.ChenGuang3 小时前
AI向量数据库chromadb的swagger-ui的运行使用教程
大数据·数据库·人工智能·ui·向量数据库·向量计算
Swift社区3 小时前
ArkUI 的页面生命周期详解
ui·arkui
PHOSKEY4 小时前
3D工业相机对AI/AR镜从扫描、标定、点胶到检测的全流程解析
人工智能·平面·3d·机器人·3d工业相机
棋鬼王4 小时前
Cesium(八) 三峡大坝水淹分析,江、湖、水库、大坝水淹决堤分析
3d·信息可视化·智慧城市·webgl·cesium
kishu_iOS&AI5 小时前
【BUG】Openclaw 2026.3.22版本 Control UI网页控制台打不开
ui·openclaw
CHQIUU5 小时前
升级到 OpenClaw v2026.3.22 后常见问题:飞书插件与 Control UI 排障记录
ui·飞书·openclaw