Unity 3D Text 穿透模型顯示的解決方法

2022-09-20 20:57:14 字數 2303 閱讀 7910

unity中3d text的預設是穿透場景顯示,即:即使text前有模型,文字也會穿透模型顯示在最前面,而是不是預期那樣模型遮擋了文字,如圖1所示:

造成這種現象的原因是:3d text的預設材質使用的shader是gui/text shader(故具有gui的穿透顯示的特性),而且不能手動更改。理解了原因,上述問題就好解決了,自然通過自定義material和shader解決。

ok,我們開始吧~~擼袖子|||

環境:unity5.6.1 + vs2013(當然這個無關緊要啊,只是個工具而已吧)

1.建立乙個新的工程

2.建立乙個3d物體用於遮擋、乙個3d text,如下所示:

注意調整兩個object的位置,使之存在遮擋,這裡capsule的世界座標為(0,0,0),3d text的座標如圖4所示為z軸的座標為-1.9,理論上 3d text位於capsule的後面,文字應該被遮擋了,而實際上卻如圖1,文字穿透了完全展示出來,在實際開發中,很多時候這種效果不是我們想要的,下面我們一起看看怎麼改。

這裡廢話一句哈,通常3d軟體都採用笛卡爾座標系來描述物體的座標資訊,而笛卡爾座標系分為左手座標系和右手座標系。

unity的座標系採用左手座標系,如圖5所示,z軸表示進深,通俗地講指向螢幕裡面(當然不一定準確哈,有助理解就行了,hoho~)

3.建立shader

在assert視窗右鍵選擇create->shader->standard su***ce shader,並命名為3dtextshader。

雙擊新建立的shader開啟編輯**的視窗,將**全部替換為下面的內容,並儲存。

shader "custom/3dtextshader" 

_color ("text color", color) = (1,1,1,1)

}subshader

lighting off cull off zwrite on fog

blend srcalpha oneminussrcalpha

pass }}

}

4.建立material

與建立shader一樣,在在assert視窗右鍵建立r,並命名為3dtextmaterial。

5.關聯shader與material

選中3dtextmaterial,在右側inspector頁面修改shader為我們自己建立的shader,如圖1所示。

6.匯入字型

到控制面板的字型下,找乙個喜歡的字型(我選的常規黑體)copy到工程的asserts目錄下。

7.將建立的shader、material賦予3d text

選中3d text,然後進行如下操作:

1)字型檔案simhei拖給text mesh元件中的font

2)將剛才上面建的材質3dtextmaterial拖給mesh renderer元件中的element 0

3)將字型下的font texture拖給材質3dtextmaterial

8.執行看成果

執行後如圖9所示,3dtext已經如預期地被正確地遮擋了,ok了。

另外:2.如上修改後,如果要調整字型顏色,需要調整自己建立的材質的text color(3d text中的color屬性已經失效)

3.如果要減少記憶體占用的話,最好去找些三四千字的精簡字型檔,只要夠用就行,通常從控制面板拷貝的字型檔裡很多都是用不到的,完全可以裁減下,以免浪費記憶體。

Unity 3D Text字跡模糊問題的解決方法

unity 3d text顯示比較雞肋,字跡模糊,可以通過如下的方法嘗試改善 可以瞄一眼大體了解一下工程的結構以及3d text的屬性設定等。1.匯入字型檔 可以直接到控制面板的字型下,找乙個喜歡的字型 我選的常規黑體 copy到工程的asserts目錄下。2.將其關聯到3d text上,具體方法參...

Unity3d中3D Text對模型的穿透顯示

原帖 昨晚,好友在 裡問我在unity3d中使用3d text,不想讓其穿透模型顯示,即想讓場景中的3d text與模型有正確的遮擋關係,怎麼解?今早谷歌上查了查,明白了原因,因為3d text的預設材質的shader是gui text shader 自然就有了gui的穿透顯示的特性 而且不可以去手...

Unity3d中3D Text對模型的穿透顯示

昨晚,好友在 裡問我在unity3d中使用3d text,不想讓其穿透模型顯示,即想讓場景中的3d text與模型有正確的遮擋關係,怎麼解?今早谷歌上查了查,明白了原因,因為3d text的預設材質的shader是gui text shader 自然就有了gui的穿透顯示的特性 而且不可以去手動更改...