Unity Text Mesh 穿透问题
  1Vt7LTSwfekE 2024年08月06日 67 0

0. 问题

在 3D 场景中使用 TextMesh 的时候,字体无法被遮挡,永远在最上层。

1e64e4def979eec5b617f9aeeac30a8f.png

虽然目前在场景中可以直接使用 TextMeshPro,但是实际开发的时候总会有各种各样的情况,可能是兼容老项目,也可能是想保持项目足够简单,不想引入 TextMeshPro。这里就只记录如何解决这一问题的方案。

1. 原因

主要是因为 TextMesh 使用的 Shader 里边有这样一句。

ZTEST Always

也就是永远通过深度检测,所以会一直处于最上层。

2. 解决方案

找到 TextMesh 默认使用的 shader,删除这一句,做一个替换。

3. 实际处理

3.1 shader

由于使用的 Unity 的内置 shader,所以无法直接修改,需要去 Unity 提供的下载地址找。Download Archive (unity.com) 下载相应的版本

4c093fe492307657a1cec7abf5ce0cc0.png

找到其中的名为 Font.shader 的文件,shader 名为 "GUI/Text Shader"
创建一个新的 shader 并删除 ZTEST Always 即可。

b713f09bbc7db6d0f870fb68e6056ce9.png

3.2 material

创建一个新的材质球,并设置 shader 为上一步创建的。替换掉默认使用的字体材质球后,你会发现,字体并不能正确显示。这是因为字体贴图无法和自定义的这个材质球自动关联,需要手动进行设置。(另外一个方式就是创建一个可编辑的字体,Create Editable Copy)
00ccb040305b4f05c399ec3289000433.png

把字体文件的贴图拖到材质球的贴图框,就可以了。
44775d18d07d48cf257db395d3788722.png

868fd4e02f24d2e2f2c4301964aa7ca5.png

最终结果

d7c12c4616793215898c36b07efb9379.png

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2024年08月06日 0

暂无评论

推荐阅读
  1wMBnbixARwC   2024年08月07日   63   0   0 游戏开发
  NiD7Hlfm86HK   2024年08月07日   58   0   0 游戏开发
  vWa2lMmTbsfJ   2024年08月07日   103   0   0 游戏开发
  PfEVswrG0sbF   2024年08月07日   53   0   0 游戏开发
  1wMBnbixARwC   2024年08月07日   66   0   0 游戏开发