FGUI系统分析
? 一、FGUI簡介
全稱FairyGUI,是一個開源的UI編輯器,支持多個游戲引擎的獨(dú)立插件。 整個插件最大 最突出的特點(diǎn):所見即所得。
官方教程:https://www.fairygui.com/docs/editor/index
二、FGUI和UGUI對比后的差異
優(yōu)勢
1.操作簡易,使用習(xí)慣與Adobe系列軟件保持一致,美術(shù)和策劃都可以輕松上手。能夠編輯器進(jìn)行簡單的測試 。
2.界面拼接制作和界面邏輯解耦,策劃與美術(shù)參與到UI的制作中, 并且貫穿整個游戲開發(fā)的全程,實(shí)現(xiàn)UI脫離程序。
策劃參與UGUI制作遇到的問題:UGUI的節(jié)點(diǎn)是由父子關(guān)系的, 而且程序在寫邏輯代碼的時候大概率會依賴于這個UI結(jié)構(gòu)。所以需要策劃先去學(xué)習(xí)Unity的UGUI的層級的概念, 而且還有一些復(fù)雜的結(jié)構(gòu),一般情況在策劃制作完成UI之后,程序可能都需要簡單的修改修改,而且策劃同時還要管理Unity的UI的UI的合理規(guī)劃,所以對于策劃來說技術(shù)門檻有點(diǎn)高。目前UGUI的UI邏輯是lua依靠find寫的。FGUI沒有層級的概念,通過名字索引,同名編輯器有提示。
性能方面,FGUI性能優(yōu)于UGUI,UGUI的層級越多越復(fù)雜DrawCall 越高,重繪的時候性能消耗越高。
3. FGUI的資源管理比較方便。劃分好包就好規(guī)劃。
瑕疵
1.程序門檻增高
FGUI有自己的一套寫法,已經(jīng)會UGUI了,比較難接受這種全新的寫法,對UGUI再封裝的那種插件接受度會更高一點(diǎn)。如果使用FGUI,我們目前的UGUI框架要重新搭建。
2.不是很適合多人開發(fā),可以進(jìn)行輕量模塊化開發(fā)。詳情可以了解包的定義。
3.像機(jī)是投影模式。沒有透視模式。無法單獨(dú)實(shí)現(xiàn)3D效果。
4.相關(guān)文檔很少,幾乎只有官方文檔。和市面上的UGUI文檔根本沒得比。
三、FGUI編輯器核心功能簡介
編輯器布局
?
1.元件(類似于UGUI的組件)
FGUI中最小的粒度單位。每個舞臺中的組成元素我們稱之為元件,如:圖片、動畫、裝載器、文本、組、組件、滾動條、列表等
在舞臺上選中任意一個元件,右邊的屬性欄出現(xiàn)共同的屬性設(shè)置面板有:
?
2.組、組件
組:(類似于UGUI的節(jié)點(diǎn))。分為普通組和高級組,普通組只起輔助管理元件的作用,程序無法通過代碼找到。高級組能導(dǎo)出,程序能找到。
組件:(類似于UGUI的預(yù)制體)。組件是FairyGUI中的一個基礎(chǔ)容器。組件可以包含一個或多個基礎(chǔ)顯示對象,也可以包含組件。
3.包
1).FairyGUI是以包為單位組織資源的。包在文件系統(tǒng)中體現(xiàn)為一個目錄。assets目錄下每個子目錄都表示一個包。包內(nèi)的每個資源都有一個是否導(dǎo)出的屬性,一個包只能使用其他包設(shè)置為已導(dǎo)出的資源,而不設(shè)置為導(dǎo)出的資源是不可訪問的。同時,只有設(shè)置為導(dǎo)出的組件才可以使用代碼動態(tài)創(chuàng)建。
2).FairyGUI是不處理包之間的依賴關(guān)系的。例如,在Unity實(shí)際使用過程中,如果B包導(dǎo)出了一個元件B1,而A包的A1元件使用了元件B1,那么在創(chuàng)建A1之前,必須保證B包已經(jīng)被載入,否則A1里的B1不能正確顯示(但不會影響程序正常運(yùn)行)。這個載入需要由開發(fā)者手動調(diào)用,FairyGUI不會自動載入。
3).劃分包,有一個原則,就是不要建立交叉的引用關(guān)系。例如避免A包使用B包的資源,B包使用C包的資源這類情況。一般都建立一個或多個公共包,把整個項(xiàng)目需要頻繁使用到的資源放在這里,把一些基礎(chǔ)組件,例如按鈕、滾動條等也放到這里。其他包需要使用時直接從公共包拖入就可以了。除了公共包,其他包相互之間盡量不發(fā)生引用關(guān)系。
4).圖片資源盡量不要太分散,不同包的圖片是不能打在同一張紋理集上的
5).每個包里都有一個package.xml文件,它是包的數(shù)據(jù)庫文件。如果這個文件被破壞,那么包的內(nèi)容將無法讀取。在多人協(xié)作的情況下,如果在拉取package.xml時出現(xiàn)沖突,請先處理好沖突,再在編輯器內(nèi)刷新包。
有點(diǎn)類似于操作Unity的預(yù)制體。
?4.裝載器
裝載器的用途是動態(tài)載入資源。如果圖片不加裝載器是不給修改和點(diǎn)擊的!
URL指向的資源可以是圖片、動畫或者組件。
?
5.關(guān)聯(lián)系統(tǒng)
關(guān)聯(lián)系統(tǒng)是FairyGUI實(shí)現(xiàn)自動布局的核心技術(shù)。類似于UGUI的錨點(diǎn)系統(tǒng)。
UGUI的錨點(diǎn)系統(tǒng)是有層級關(guān)系。
FGUI的關(guān)聯(lián)系統(tǒng)是可以指定關(guān)聯(lián)任意元件
?
6. 控制器
控制器是FairyGUI核心功能之一。它為UI制作中以下類似需求提供了支持:
1)分頁:一個組件可以由多個頁面組成。
2)按鈕狀態(tài):顯示隱藏等
3)屬性變化:位移旋轉(zhuǎn)等
?
?
還可以結(jié)合下面的分支實(shí)現(xiàn)一些有意思的功能:如多語言版本解決方案。
(詳情看分支)
7.分支
分支功能用于實(shí)現(xiàn)項(xiàng)目的多態(tài)設(shè)計(jì),例如多國語言版本下UI的差別,又例如多個渠道版本下UI的差別。
分支的用途是對主干進(jìn)行部分修改。我們都是首先在主干上開發(fā),然后在項(xiàng)目的任何階段,都可以建立任意多個分支。注意,它和代碼倉庫中的分支概念不一樣。UI分支不包含主干的資源,它只放置與主干有差別的內(nèi)容。
在編輯器內(nèi),分支就和包里的一個普通的文件夾沒有任何區(qū)別,你可以向這個文件夾添加資源,也可以從其他地方移入或者粘貼資源,沒有任何限制。按照分支的機(jī)制,分支和主干的資源只要路徑和名稱完全一致,他們就會自動建立一個映射關(guān)系。
UGUI多語言方案:
1).各種語言版本建立完全獨(dú)立的工程
2).通過代碼或者配置文件進(jìn)行運(yùn)行時調(diào)整
搭配控制器一起使用實(shí)現(xiàn)多語言多版本解決方案。
8.多國語言
對UI多國語言的支持,FairyGUI提供了這樣一種方案:把界面上的所有文字導(dǎo)出到一個文件,然后把這個文件提交翻譯,運(yùn)行時動態(tài)載入翻譯好的文件,由SDK完成界面文字的替換。
也就是說,FairyGUI的方案是先拼界面,再翻譯;
9.發(fā)布,導(dǎo)入與導(dǎo)出
FGUI的包發(fā)布之后會產(chǎn)生兩類文件:一個描述文件(二進(jìn)制文件)和一張或多張紋理集。
可以將部分資源導(dǎo)出為一個資源包,也可以導(dǎo)入資源包。
?
分支發(fā)布處理方式有兩種:
1.合并發(fā)布
2.只發(fā)布選中的分支。主干和分支分開。
四、Unity 上使用FGUI
1.手動設(shè)置,
在Hierarchy面板,右鍵,選FairyGUI,點(diǎn)UIPanel,可以實(shí)例化一個UIPanel出來。
左邊選擇的是我們的包名,右邊是包里包含的每一個資源(FGUI里面的組件)。
?
?2.代碼動態(tài)生成??
總結(jié)
- 上一篇: 数据库调优要点纪要
- 下一篇: Acitivty生命周期