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

修改如下:

相关推荐
地狱为王2 小时前
Unity使用VoxLock实现语音隔离
unity·游戏引擎·音频处理·voxlock
言乐62 小时前
通过 3D 动画直观演示球形瓶内可滑动半圆机构在倾倒时防粘盖、回正时刮膏体的运动学过程
python·3d·django·virtualenv·pygame
Jmyd01235 小时前
博物馆数字展厅系统架构设计:实景采集到云渲染全链路
unity·系统架构·博物馆·数字展厅·博物馆数字化
苏州福兰克5 小时前
没有3D内容,裸眼3D显示器还能用吗?
3d·计算机外设
慧都CAD开发笔记8 小时前
汽车零部件检测软件如何用统一接口直读多种 CAD:3D InterOp 的三类数据接入
3d·汽车
苏州福兰克8 小时前
长期看裸眼3D显示器容易视觉疲劳吗?
3d·计算机外设
苏州福兰克8 小时前
商用裸眼3D显示器和家用款主要差别在哪里?
3d·计算机外设
weixin_424294678 小时前
对于未加入 Script Execution Order 的脚本
unity
天树星智源9 小时前
静态物理满分、交互 11.54%:3D 场景生成系统的幻觉
论文阅读·人工智能·3d·机器人
暴走约伯9 小时前
【VFX工具链源码拆解 03】告别机械劳动(下):材质字典映射批处理与智能纹理槽识别
unity·游戏引擎·材质