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

修改如下:

相关推荐
多恩Stone5 天前
【C++入门扫盲1】C++ 与 Python:类型、编译器/解释器与 CPU 的关系
开发语言·c++·人工智能·python·算法·3d·aigc
修炼前端秘籍的小帅5 天前
Stitch——Google热门的免费AI UI设计工具
前端·人工智能·ui
王码码20355 天前
Flutter for OpenHarmony:socket_io_client 实时通信的事实标准(Node.js 后端的最佳拍档) 深度解析与鸿蒙适配指南
android·flutter·ui·华为·node.js·harmonyos
weixin_424294675 天前
Unity 调用Steamworks API 的 SteamUserStats.RequestCurrentStats()报错
unity·游戏引擎·steamwork
HoFunGames5 天前
Unity小地图,Easy Minimap System MT-GPS插件
unity·游戏引擎
多恩Stone5 天前
【3D-AICG 系列-15】Trellis 2 的 O-voxel Shape: Flexible Dual Grid 代码与论文对应
人工智能·python·算法·3d·aigc
2501_921930835 天前
Flutter for OpenHarmony:第三方库实战 chewie 视频播放器UI组件详解
flutter·ui
在下胡三汉5 天前
为什么“资产土地”标准化主资产的 glTF、glb格式模型,为什么非常流行
3d
2401_863801465 天前
3DTiles(.b3dm,i3dm,cmpt) 数据转换fbx转obj转max转su,cesium格式模型转换
3d