Unity3D 搭建優雅的UI框架


這篇文章是博主早年寫的,當初年少不懂事,竟然取這個標題,那時候的我完全沒能力寫好UI框架。

現在樓主已經轉行去當廚師了,各位看官非常抱歉了,浪費你們時間點進來。

 

為什么要使用UI框架?直接使用NGUI或UGUI一拖一拉直接搭載出界面不就行了?

我相信很多小白,包括我在剛學習Unity3D UI的時候都這樣想過。

我的第一款款Unity2D游戲《山地賽車》,使用的就是NGUI搭載界面。

弱聯網手游一般都沒什么復雜的界面,我也是很輕松花一天就把界面搭載好了,看起來好挺好看的,還花了不少時間做動態效果。

界面搭載好后,開始開發游戲內容,這下問題開始來了:

1.如何實現界面間的溝通?例如點擊返回按鈕,返回上一個界面,點擊背包系統,彈出背包。

2.如何實現界面與游戲數據的溝通?例如點擊排行榜,能列出最新的排名,點擊購買車輛,能扣錢並買入新的車輛。

一開始我的做法(我相信也是大部分新手最喜歡的做法)就是為每個要觸發功能的UI添加一個腳本,然后添加一個public gameobject,

然后拖入觸發UI時要控制的object。在腳本的OnClick等函數里實現邏輯功能。

這樣做是挺容易。很快我也花了半天時間拖來拖去,把UI要關聯的各種物件綁定好。

但是接下來的各種問題讓我非常頭疼:

1.隨着游戲系統的復雜,UI控件越來越多,各個UI直接的通訊,以及UI與GameObject之間的通訊形成一張復雜的蜘蛛網,

拖着拖着,有時候我都忘了哪個對象跟哪個對象關聯了。如果是別人要看我的程序,我估計他找半天都找不到UI邏輯的入口。

2.耦合性非常嚴重,如果要改變需求,更改某個UI或者更改某個游戲對象,那么你需要再手動全部與該對象關聯的物件重新更改一次。

3.作為強迫症的我,最受不了程序代碼的混亂。這種組織方式十分“不優雅”,看着很亂。

 

鑒於以上各種情況,我開始尋找一種新的,科學的,高效的UI管理方式,

最開始想到的就是大名鼎鼎的MVC模式,我想過用它來管理我的UI,不過由於我對MVC模式不是很熟悉,嘗試了下,效果並不是很好。

在網上搜到幾個不錯的UI框架,都寫得很不錯,各位可以參考參考:

1.Unity-UI-Framework的設計與實現 By:王選易 Github

2.簡單、強大的TTUIFramework By:chiuan 游戲蠻牛 (這位的設計思路是參考上面那位作者的)

3.【設計和開發一套自動化UI框架】 By:NPC燕 游戲蠻牛

 

他們的設計思路都很清晰,做出來的效果也都很強大,都是些游戲界的大牛,但是都有點復雜。

作為一名菜鳥,我當然要設計出只有菜鳥能看得懂的東西啦。

好了,廢話不多說,以下是我設計的兩個主要方向:

1.設計一套用於管理UI的框架,各個UI的生成,銷毀,切換,都是通過這個Manager單例來實現。各個UI間不直接聯系。

2.所有UI都基於一個UIBase基類,每個UI的預設對應一個UIBase子類腳本,UI的基本邏輯在該類中實現,例如:_MenuView.prefab 對應 _MenuView.cs

3.重新實現Unity3D的消息通訊,原有SendMessage效率較低,利用訂閱-發布(即觀察者模式)重新設計一套通訊中心,所有UI間的通訊,

以及UI和游戲層的通訊,皆間接通過MessageCenter來管理。實現解耦。

4.以棧發方式管理UI,每次打開一個新的UI,都將它堆入棧,關閉時出棧。這個棧是一個特殊的棧,例如它可以實現,某個不在棧頂的UI,可以“TOP”到棧頂。

 

未完待續。。。


免責聲明!

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



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