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


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 Surface Shader,並命名為3DTextShader。

雙擊新創建的Shader打開編輯代碼的窗口,將代碼全部替換為下面的內容,並保存。

Shader "Custom/3DTextShader" {
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
}
}
}
}

 

4.創建Material

與創建Shader一樣,在在Assert窗口右鍵創建r,並命名為3DTextMaterial。

5.關聯Shader與Material

選中3DTextMaterial,在右側Inspector頁面修改Shader為我們自己創建的Shader,如圖1所示。

6.導入字體

到控制面板的字體下,找一個喜歡的字體(我選的常規黑體)Copy到工程的Asserts目錄下。

在Asserts窗口中選中新導入的字體文件simhei,在右側Inspector窗口中將Character選項改為Unicode,修改后會提示如圖8所示的提示是否應用的窗口,點擊【Apply】即可,這樣字體文件下面的那張Font Texture就會出現密密麻麻地文字。

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了。

另外:

1.3D Text展示效果比較差,邊緣會很模糊,如圖6所示,這個可以通過一些小的調整修正,這個會在另一篇文章中介紹(圖9的最終效果是已經修正后的效果),鏈接如下:

https://blog.csdn.net/sarsscofy/article/details/85096994

2.如上修改后,如果要調整字體顏色,需要調整自己創建的材質的Text Color(3D Text中的Color屬性已經失效)

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

 

參考資料:

感謝XDJM的分享~。~

https://blog.csdn.net/aihiao/article/details/80073477

https://blog.csdn.net/biezhihua/article/details/77489399

https://www.cnblogs.com/fengrenyuan/p/3729642.html

https://blog.csdn.net/alayeshi/article/details/78095559


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM