You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中如何为Text Mesh Pro添加外定位(OUTER POSITIONED)描边?

实现Text Mesh Pro外描边的几种方法

方法1:自定义Shader修改(最精准)

TMP默认Outline Shader是从中心向外扩张,导致边缘生硬,只需修改Shader的描边计算逻辑就能实现外描边:

  1. 找到TMP默认Outline Shader路径:Packages/com.unity.textmeshpro/Resources/Shaders/TMP_SDF_Outline.shader
  2. 复制一份重命名(比如TMP_SDF_OuterOutline.shader),避免覆盖原文件
  3. 修改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;
    }
    
  4. 将修改后的Shader赋值给TMP组件的Material,调整Outline Width和Softness参数即可

方法2:使用第三方插件(快速便捷)

  • TMP Pro Extra Effects:Asset Store上的专用插件,导入后直接替换TMP材质,就能切换外描边模式,还支持渐变描边等额外效果
  • Easy Outline for TMP:轻量插件,支持一键切换中心/外描边,可调整描边偏移、粗细等参数

方法3:双重文本叠加(无代码应急方案)

如果不想改Shader或用插件,直接用叠加方式实现:

  1. 创建两个完全重合的TMP Text对象,放在同一父物体下保证位置同步
  2. 下层文本:设置为描边颜色,将Font Size调大2-4个单位(对应描边粗细),关闭Face Color(设为透明)
  3. 上层文本:设置正常文字颜色,关闭Outline

这种方法会增加Draw Call,适合简单场景临时使用


内容的提问来源于stack exchange,提问作者Versailles

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 00:10:49