Unity基础知识学习四,UI框架设计
這個隨便照著公司項目搞幾下,回答一下就行
1.什么是UI框架
高內聚,低耦合,管理繁雜的UI。
2.為什么要有UI框架
略
3.如何使用UI框架,使用UI框架的不同方案比較
3.1 簡單UI框架
4.UI框架源碼實現
4.1.設計目的
4.1.1 解決UI控件越來越多,耦合性高,管理混亂。
4.1.2 優化UI重復打開的性能。
4.1.3 管理多個界面重疊顯示的情形。
4.2.設計思想:
4.2.1 棧的設計思想。
后進先出,先進后出。后打開的頁面覆蓋先打開的頁面。
每當新打開一個界面,都把一個UIModel放入棧中。每關閉一個界面,從棧中拿出來一個UIModel。
4.2.2 glue膠水的設計思想
在UI執行某個行為之前,對這個行為,遍歷一遍glue膠水層。來對這個界面和行為,進行自定義的初始化。有點像流水線模式。
4.2.3 模板的設計思想
模板模式 | 菜鳥教程模板模式 在模板模式(Template Pattern)中,一個抽象類公開定義了執行它的方法的方式/模板。它的子類可以按需要重寫方法實現,但調用將以抽象類中定義的方式進行。這種類型的設計模式屬于行為型模式。 介紹 意圖:定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。 主要解決:一些方法通用,卻在每一個子類都重新寫了這一方法。 何時使用:有一些通用的方法。..https://www.runoob.com/design-pattern/template-pattern.html基礎界面,沒有自定義模板就使用默認模板。OnAwake,OnShow,OnAfterShow,OnHide,OnDestroy
4.2.4 緩存池
享元模式 | 菜鳥教程享元模式 享元模式(Flyweight Pattern)主要用于減少創建對象的數量,以減少內存占用和提高性能。這種類型的設計模式屬于結構型模式,它提供了減少對象數量從而改善應用所需的對象結構的方式。 享元模式嘗試重用現有的同類對象,如果未找到匹配的對象,則創建新對象。我們將通過創建 5 個對象來畫出 20 個分布于不同位置的圓來演示這種模式。由于只有 5 種可用的顏色,所以 color 屬性被用來檢查現有的 Circle 對象。 介..https://www.runoob.com/design-pattern/flyweight-pattern.html重新打開某個界面的時候,不需要重新創建頁面,只需要從緩存里面拿出來。
4.3 框架主體結構:
4.3.1 MVVM結構
MVVM框架 - 簡書了解MVVM框架嗎? Vue.js React.js Angular.js 談談你對MVVM的認識? MVVM的定義 M:Model(服務器上的業務邏輯操作)V:View(頁...https://www.jianshu.com/p/e4e3519a58a6
MVVM的定義
M:Model(服務器上的業務邏輯操作)
V:View(頁面)
VM:ViewModel(Model與View之間核心樞紐,比如Vue.js)
?UIMgr控制特定的UIModel,然后UIModel控制特定的View.
4.3.2 UIMgr.類
4.3.2.1 配置顯示規則
兩種規則UIHideOtherRule.lua和UIOverlayRule.lua,就是隱藏別人和不隱藏疊加。以及一個UIStackRule.lua 維護界面UI的棧。
4.3.2.2 一個緩存池,關頁面的時候存入緩存,開頁面的時候檢測緩存里面有沒有值。
4.3.2.3 創建和管理UIModel。
4.3.2.4 執行模板UIDisplay.lua和規則。
4.3.3 UIModel類
根據UIPanelConfig.lua中的lua文件路徑,創建一個獨立的table環境。
以及存儲UI的各種信息。比如說gameobject的節點,比如ui的define名稱。
?
4.3.4 Rule類(重點StackRule)
根據頁面打開的param來配置顯示的Rule,主要由UIHideOtherRule.lua和UIOverlayRule.lua,就是打開頁面時隱藏別人和不隱藏別的界面而疊加。以及一個UIStackRule.lua 維護界面UI的棧。
4.3.5 UIPanelConfig類
存儲定義的名稱,以及:
PrefabPath
ScriptPath
等信息
4.3.6 Glue膠水
UIMgr.lua控制,執行打開關閉或者某個UI的特定函數的時候,順帶會把初始化好的膠水列表遍歷一遍,在膠水中也執行這個特定函數。
比較典型的有組件收集,Coms,某個UI頁面,Panel中定義了很多組件,比如CloseBtn,以及這個CloseBtn在界面prefab預制體中的路徑,打開頁面的時候,順帶會啟動組件收集的Glue,把定義的CloseBtn對應的目錄,轉換成Unity場景中實際的gameobject。這樣就能直接調用和操作了。
4.3.7 模板函數
基礎界面的模板,對界面操作的時候,也會對模板進行操作。
4.3.8 緩存Cache
一個緩存池,關頁面的時候存入緩存,開頁面的時候檢測緩存里面有沒有值。
4.4?基礎設計模式封裝
4.4.1 工廠模式提供Rule
根據打開界面的type,來選擇顯示節的Rule
4.4.2 模板模式
有自定義模板就自定義,如果沒有就默認模板UIDisplay.lua
5.UI框架關鍵點,重要節點,疑難雜癥場景
5.1 模態窗口和非模態窗口
窗口A彈出窗口B,如果窗口B是模態的,在窗口B關閉前就不可能切換到窗口A;如果B是非模態的,那可以在這兩個窗口之間任意切換。
默認時非模態,A窗口背面能點擊B窗口,如果要設置為模態,則需要在View的模板中,設置一個透明的幕布擋板,擋住點擊事件。
如果要更改stack中的界面的顯示層級,則需要涉及到renderOrder。
5.2 關掉棧后面的窗口
直接檢索stack和出棧,然后銷毀或者回收這個頁面就行。
5.3 如何讓后面的窗口不讓點擊
設置為模態,在View的模板中,設置一個透明的幕布擋板,擋住點擊事件。
6.參考
MVVM框架 - 簡書
基于Unity~UGUI的簡單UI框架(附UIFramework源碼)_cchoop的博客-CSDN博客_ugui框架
Unity基于UGUI的UI框架_萬事屋銀ちやん-CSDN博客_unity優秀的ui框架
模態窗口和非模態窗口_阿桑的專欄-CSDN博客_模態窗口
總結
以上是生活随笔為你收集整理的Unity基础知识学习四,UI框架设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Unity基础——刚体
- 下一篇: Unity脚本基础