Unity3D 搭建優雅的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”到棧頂。
幾個不錯的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
未完待續。。。
相關文章
- 如何優雅阻止view UI 的 Switch 切換?ViewUI
- 如何優雅的分析 ThinkPHP 框架原始碼PHP框架原始碼
- 封裝一個優雅的element ui表格元件封裝UI元件
- 一個乾淨優雅的 Element UI Admin 模板UI
- 如何優雅的設定UI庫元件的屬性?UI元件
- (十)Flutter FutureBuilder 優雅構建非同步UIFlutterRebuild非同步
- 【Unity3D】UI Toolkit容器Unity3DUI
- 搭建自己的腳手架—“優雅”生成前端工程前端
- 搭建一個快速、優雅的 Laravel 的開發環境Laravel開發環境
- 對laravel框架你瞭解多少,為什麼說是優雅的框架Laravel框架
- Vue3 企業級優雅實戰 - 元件庫框架 - 8 搭建元件庫 cliVue元件框架
- “4S”框架快速構建優雅的Java服務框架Java
- 優雅的PromiseKitPromise
- 如何優雅的搞垮伺服器,再優雅的救活伺服器
- Vue+ Element Ui 搭建前端專案框架(二)VueUI前端框架
- Vue+ Element Ui 搭建前端專案框架(三)VueUI前端框架
- Vue+ Element Ui 搭建前端專案框架(一)VueUI前端框架
- 【剖析 | SOFARPC 框架】系列之 SOFARPC 優雅關閉剖析RPC框架
- BeeHive —— 一個優雅但還在完善中的解耦框架Hive解耦框架
- 用vue優雅地編寫UI元件的幾條指導原則VueUI元件
- 優雅的使用UITableViewUIView
- 優雅的程式碼
- 自監督SOTA框架 | BYOL(優雅而簡潔) | 2020框架
- java 日誌脫敏框架 sensitive,優雅的列印脫敏日誌Java框架
- 面試官問:你對laravel 框架了解多少,為什麼說是優雅的框架?面試Laravel框架
- 使用策略模式優雅引用第三方框架模式框架
- 類的優雅寫法
- 如何優雅的使用介面
- 如何優雅的寫Markdown
- EventBus的優雅封裝封裝
- 分塊——優雅的暴力
- 如何優雅的使用MyBatis?MyBatis
- 你知道Laravel為什麼會成為最優雅的PHP框架嗎?LaravelPHP框架
- AT-UIの入手某東的UI框架UI框架
- UI框架研究工作,不可不看的13個UI框架UI框架
- Golang優化-優雅退出Golang優化
- vue+vux-ui+axios+mock搭建一個簡單vue框架VueUXUIiOSMock框架
- web ui 框架WebUI框架
- 優雅 VS 效能