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

修改如下:

相关推荐
xcLeigh5 小时前
Unity基础:C#脚本的创建与挂载——让你的游戏物体活起来
游戏·unity·c#·教程
huangns9 小时前
汽车座椅、脚垫3D扫描数字化打版怎么做,需要哪些设备?
3d
飞凌嵌入式10 小时前
告别多端重复开发:Buildroot+Flutter实现全平台UI风格统一
flutter·ui
云飞云共享云桌面12 小时前
非标装备厂降本方案|8‑10 人三维研发共用一台主机,兼容SolidWorks等多款 3D 绘图软件
运维·服务器·3d·自动化·负载均衡·制造
DaLiangChen1 天前
Vuforia 地面识别案例
unity·ar
FungLeo1 天前
Flutter 把第三方 UI 库渐进迁回 Material 3:组件映射总表 + 四批次替换实战
flutter·ui
鹤卿1231 天前
「iOS」天气预报仿写总结
ui·ios·objective-c
江畔柳前堤1 天前
YOLO 目标检测全流程深度剖析
人工智能·yolo·目标检测·计算机视觉·unity·面试·vllm
A24207349301 天前
Vue + TypeScript 请求数据后结合 Element UI 实现树形菜单与下拉选择
vue.js·ui·typescript