昨晚,好友在電話里問我在Unity3d中使用3D Text,不想讓其穿透模型顯示,即想讓場景中的3D Text與模型有正確的遮擋關系,怎么解?
今早谷歌上查了查,明白了原因,因為3D Text的默認材質的shader是GUI/Text Shader(自然就有了GUI的穿透顯示的特性),而且不可以去手動更改。
記錄解決方式如下:
1、自己寫個想要的shader,並建個使用它的材質球;
2、導入自己的中文字體;
3、替換掉3D Text上的默認材質球。
首先,搭建一個好友在電話里描述的場景;

新建一個shader,命名為3D Text Shader,並在其中貼上以下代碼:
Shader "Custom/3D Text Shader" { Properties { _MainTex ("Font Texture", 2D) = "white" {} _Color ("Text Color", Color) = (1,1,1,1) } SubShader { Tags{ "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" } Lighting Off Cull Off ZWrite On Fog { Mode Off } Blend SrcAlpha OneMinusSrcAlpha Pass { Color [_Color] SetTexture [_MainTex] { combine primary, texture * primary } } } }
給一個截圖:

新建一個Material,並指定上剛寫的shader;

下一步是導個字體文件進來,去控制面板的字體路徑中,找一個喜歡的中文字體復制到Unity3d的Assets文件夾中,我復制了一個黑體過來;

回到Unity3d中,把字體文件的Character選項改為Unicode,這樣字體文件下面的那張Font Texture就會出現密密麻麻地文字;

最后,選中場景中的需要被正確遮擋的3D Text物體,進行以下3個操作,就完成了:
1、字體文件拖給Text Mesh組件中的Font;
2、剛才自己建的材質球拖給Mesh Renderer組件中的Element 0;
3、字體下的Font Texture拖給材質球。
如圖:

PS:
1、如果要調整字體顏色,3D Text中的Color屬性已經失效,需要去調整那個自己建的材質球的Text Color;
2、關於字體,如果無視內存占用的話,字體就去控制面板里面的字體隨便復制來用,否則,想做到最優的話,建議去網上找那個三四千字的精簡字庫。
