2.0.1 【Unity】3D UI的實(shí)現(xiàn)方式

????首先我們需要明確的是——3D UI是什么?
Ⅰ、3D UI本質(zhì)上,依然是UI
????是UI,就需要承擔(dān)UI的交互職能
????例如:
????當(dāng)我們點(diǎn)擊UI上的按鈕(Button)時,按鈕(Button)會帶來交互反饋,并觸發(fā)設(shè)定的事件,以達(dá)到邏輯運(yùn)行的目的。
????擁有這些UI的特征,并且以3D形式呈現(xiàn)的“UI”,歸于今天說到的——3D UI

Ⅱ、3D UI大體上可以分為兩種
????其一,是位于3D場景中,不跟隨游戲窗口(Game)運(yùn)動而運(yùn)動的UI。它更像是一個位于3D場景中的物件,并帶有UI的交互特征,我們可以嘗試將其定義為——場景化UI

????其二,是始終位于游戲窗口(Game)上,和常規(guī)的UI一樣。但3D UI可以進(jìn)行XYZ三個軸上的運(yùn)動,帶來明顯的透視變化,我們可以嘗試將其定義為——透視UI

????值得注意的一點(diǎn)是,可愛的UI設(shè)計師們,可以在UI設(shè)計之初就導(dǎo)出——帶透視的切圖資源,并導(dǎo)入引擎中,用常規(guī)搭建UI的方式,最終產(chǎn)生出“透視”UI的效果。
????3D UI方式實(shí)現(xiàn)的透視UI,和常規(guī)方式實(shí)現(xiàn)的“透視”UI,最大的區(qū)別在于,3D UI實(shí)現(xiàn)的透視UI,可以進(jìn)行透視方向上的運(yùn)動

?Ⅲ、場景化UI的實(shí)現(xiàn)方式
????①將UI預(yù)制體(Prefab)拖拽到場景的層級窗口(Hierarchy)中
????②選中UI預(yù)制體(Prefab)生成的節(jié)點(diǎn),屬性窗口(Inspector)中找到Canvas組件,將渲染模式(Render Mode),設(shè)置為——世界空間(World Space),將目標(biāo)攝像機(jī)(Event Camera)設(shè)置為Main Camera,然后確定Main Camera的投影(Projection)設(shè)置為透視(Perspective)。實(shí)際項(xiàng)目中UI節(jié)點(diǎn)可能是動態(tài)生成的,所以鏈接攝像機(jī)這一步,需要前端小伙伴的幫助。


????到這一步為止,我們創(chuàng)建的UI預(yù)制體(Prefab)在場景中,已經(jīng)是3D UI了。以下是驗(yàn)證階段
????③在層級窗口(Hierarchy)中,右鍵創(chuàng)建Cube,然后將UI節(jié)點(diǎn)拖拽為Cube的子節(jié)點(diǎn)。調(diào)整Cube和Main Camera的空間位置,讓Cube置于Main Camera拍攝范圍之內(nèi),可以切換到游戲窗口(Game)查看,或是點(diǎn)擊Main Camera節(jié)點(diǎn),在場景窗口右下角查看。????修改UI節(jié)點(diǎn)的Transform。Position和Rotation設(shè)置為0。這里著重強(qiáng)調(diào)一下,UI節(jié)點(diǎn)本質(zhì)還是UI的創(chuàng)建方式,Cube本質(zhì)是Mesh的創(chuàng)建方式。而UI和Mesh,Transform的單位是有區(qū)別的。所以當(dāng)我們完成上面操作時,會發(fā)現(xiàn)UI特別大。此時我一般會通過調(diào)整UI節(jié)點(diǎn)的Scale來進(jìn)行適配。為了使UI,更像是Cube頭頂?shù)膱鼍盎疷I,輕微調(diào)節(jié)UI節(jié)點(diǎn),Position Y。
????④運(yùn)行,通過手動調(diào)整Main Camera和Cube的Transform,可以看到UI跟隨著Cube的運(yùn)動而運(yùn)動,且會跟隨攝像機(jī)的旋轉(zhuǎn)而離開畫面。
????⑤在運(yùn)行情況下,點(diǎn)擊畫面中UI上的按鈕(Button),依然可以執(zhí)行打開彈窗的邏輯,UI的特征沒有消失
????完成

Ⅳ、透視UI的實(shí)現(xiàn)方式
????①在層級窗口(Hierarchy)中,選中UI預(yù)制體(Prefab)生成的節(jié)點(diǎn),在屬性窗口(Inspector)中找到Canvas組件,將渲染模式(Render Mode),設(shè)置為——屏幕空間-攝像機(jī)(Screen Space - Camera),將目標(biāo)攝像機(jī)(Event Camera)設(shè)置為Main Camera,確定Main Camera的投影(Projection)設(shè)置為透視(Perspective)
????②選中UI預(yù)制體(Prefab)生成的節(jié)點(diǎn),屬性窗口(Inspector)中找到Canvas組件,將渲染模式(Render Mode),設(shè)置為——世界空間(World Space),將目標(biāo)攝像機(jī)(Event Camera)設(shè)置為Main Camera,然后確定Main Camera的投影(Projection)設(shè)置為透視(Perspective)。實(shí)際項(xiàng)目中UI節(jié)點(diǎn)可能是動態(tài)生成的,所以鏈接攝像機(jī)這一步,需要前端小伙伴的幫助。


??? ②運(yùn)行。首先,這個設(shè)置下的UI預(yù)制體(Prefab)生成的節(jié)點(diǎn)不再具備Transform的屬性,所以通過手動調(diào)整子節(jié)點(diǎn)的Transform,可以看到UI變成了有透視變化的3D UI,且調(diào)整攝像機(jī)的Transform并不會對UI帶來影響,這就是場景化UI和透視UI最大的區(qū)別。
????點(diǎn)擊透視UI上的按鈕(Button),依然可以執(zhí)行打開彈窗的邏輯,UI的特征沒有消失
????完成
