Unity3D 搭建優雅的UI框架

阿鵬哥哥01發表於2017-04-19

為什麼要使用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”到棧頂。

 

幾個不錯的UI框架

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

http://www.manew.com/thread-42748-1-1.html

https://github.com/MrNerverDie/Unity-UI-Framework

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

http://www.manew.com/thread-42929-1-1.html?_dsign=8c9bee85

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

http://www.manew.com/thread-41889-1-1.html?_dsign=57fa0b1a

未完待續。。。

相關文章