Unity Text Mesh 穿透問題

fcnaud發表於2024-06-11

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

相關文章