Unity中如何为Text Mesh Pro添加外定位(OUTER POSITIONED)描边?
实现Text Mesh Pro外描边的几种方法
方法1:自定义Shader修改(最精准)
TMP默认Outline Shader是从中心向外扩张,导致边缘生硬,只需修改Shader的描边计算逻辑就能实现外描边:
- 找到TMP默认Outline Shader路径:
Packages/com.unity.textmeshpro/Resources/Shaders/TMP_SDF_Outline.shader - 复制一份重命名(比如
TMP_SDF_OuterOutline.shader),避免覆盖原文件 - 修改Shader的片元函数部分,替换描边计算逻辑:
float4 Frag(v2f i) : SV_Target { float distanceField = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.texcoord).a; float faceAlpha = smoothstep(_FaceDilate - _Softness, _FaceDilate + _Softness, distanceField); // 仅在文字外部生成描边,遮罩内部区域 float outlineAlpha = smoothstep(_OutlineWidth - _Softness, _OutlineWidth + _Softness, 1.0 - distanceField); outlineAlpha *= (1.0 - faceAlpha); float finalAlpha = faceAlpha + outlineAlpha * _OutlineColor.a; float4 finalColor = lerp(_OutlineColor, _FaceColor, faceAlpha / finalAlpha); finalColor.a = finalAlpha * _FaceColor.a; return finalColor; } - 将修改后的Shader赋值给TMP组件的Material,调整Outline Width和Softness参数即可
方法2:使用第三方插件(快速便捷)
- TMP Pro Extra Effects:Asset Store上的专用插件,导入后直接替换TMP材质,就能切换外描边模式,还支持渐变描边等额外效果
- Easy Outline for TMP:轻量插件,支持一键切换中心/外描边,可调整描边偏移、粗细等参数
方法3:双重文本叠加(无代码应急方案)
如果不想改Shader或用插件,直接用叠加方式实现:
- 创建两个完全重合的TMP Text对象,放在同一父物体下保证位置同步
- 下层文本:设置为描边颜色,将Font Size调大2-4个单位(对应描边粗细),关闭Face Color(设为透明)
- 上层文本:设置正常文字颜色,关闭Outline
这种方法会增加Draw Call,适合简单场景临时使用
内容的提问来源于stack exchange,提问作者Versailles
相关产品推荐
相关产品推荐

