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