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