生活随笔
收集整理的這篇文章主要介紹了
                                
Fgui入门了解
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.                        
 
                                
                            
                            
                            一、UI插件的選擇
筆者第一個(gè)項(xiàng)目用的插件是NGUI,因?yàn)楫?dāng)時(shí)沒(méi)得選,市場(chǎng)上就有這一款插件供使用。自從Unity推出了自己的UGUI,大部分新的項(xiàng)目也相繼使用開(kāi)來(lái)。我猜想主要原因是UGUI是Unity原生的,所以效率性能應(yīng)該會(huì)好很多,兼容性也會(huì)提高。筆者兩款UI插件都有用過(guò),但是從去年開(kāi)始就關(guān)注Unity的第三款UI插件FairyGUI,發(fā)現(xiàn)此款插件有很多方便開(kāi)發(fā)者的功能,加之筆者自己的實(shí)驗(yàn)項(xiàng)目那就研究個(gè)沒(méi)嘗試過(guò)得好了,所以就選擇了FairyGUI。?
FairyGUI地址:http://www.fairygui.com/?
第一件事就是上官網(wǎng)下demo,看官網(wǎng)的視頻、帖子,加官方群詢問(wèn)一些不了解的地方。筆者這里建議在問(wèn)問(wèn)題之前最好把自己能查到的能看到的東西都看完,這樣也是出于對(duì)作者的尊重,也不會(huì)讓自己遭人嫌棄。
二、語(yǔ)言的選擇
說(shuō)個(gè)好玩的事情,筆者想寫自己的項(xiàng)目不是一天兩天了,之前也放棄過(guò)一次,那時(shí)候覺(jué)得一個(gè)項(xiàng)目必須做好熱更新,有bug就要及時(shí)修復(fù),還能更新出一些新玩法。但是筆者服務(wù)器的造詣尚淺,那時(shí)候沒(méi)有找到如果做到lua協(xié)議熱更新,如果協(xié)議不能熱更新那么能更新的新功能的太少,在尋找探索的過(guò)程中也就放棄了。?
當(dāng)然筆者現(xiàn)在還是不太會(huì)服務(wù)器,羅馬不是一天建成的所以此次先用c#寫項(xiàng)目,但是我會(huì)減少對(duì)c#的依賴,等哪天搞定的服務(wù)器,就將框架移植到lua中
三、UI插件的使用
FGUI在Unity方面的使用主要關(guān)注的是“包”也就是Package。你如果想顯示一個(gè)UI界面,首先需要找到UI界面所引用的包,將這些包加載進(jìn)來(lái)(UIPackage.AddPackage),你才能看到UI的界面(UIPackage.CreateObject)。?
所以UI框架的第一個(gè)任務(wù)是需要管理Package的加載與卸載,還有Component的顯示。?
那么第一份代碼就是管理包
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using FairyGUI;
public class UIPackageManager : BaseManager<UIPackageManager>
{
private Dictionary<
string, 
bool> packageAddDict = 
new Dictionary<
string, 
bool>();
public void AddPackage(
string packageName){
if (CheckPackageHaveAdd(packageName) == 
false){UIPackage.AddPackage(
"UI/"+packageName);}}
public bool CheckPackageHaveAdd(
string packageName){
return packageAddDict.ContainsKey(packageName);}
public void ClearNotUsePackage(){}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
通過(guò)一個(gè)字典來(lái)記錄UI的包是否已經(jīng)加載進(jìn)來(lái),筆者在想何時(shí)卸載,由于是第一款小游戲暫時(shí)先不做的那么詳細(xì)(我懶),如果UI資源比較少,完全可以不卸載。也可以等applicationDidReceiveMemoryWarning過(guò)來(lái)卸載沒(méi)有用到的資源,這就涉及UI界面與包的引用關(guān)系了,等我想明白再開(kāi)一貼記錄。?
下面第二份代碼是界面的管理
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using FairyGUI;
public class DialogManager : BaseManager<DialogManager>
{Dictionary<DialogType, BaseDialog> dialogDict = 
new Dictionary<DialogType, BaseDialog>();
public void OpenDialog(DialogType dialogType){DialogInfo dialogInfo = DialogConfigManager.GetInstance().GetDialogInfo(dialogType);UIPackageManager.GetInstance().AddPackage(dialogInfo.GetPackName());GComponent view = UIPackage.CreateObject(dialogInfo.GetPackName(), dialogInfo.GetDialogName()) 
as GComponent;view.SetSize(GRoot.inst.width, GRoot.inst.height);GRoot.inst.AddChild(view);dialogDict[dialogType] = DialogConfigManager.GetInstance().GetDialogControl(dialogType);dialogDict[dialogType].SetDialogView(view);dialogDict[dialogType].OnBeforeCreate();dialogDict[dialogType].AddListener();dialogDict[dialogType].OnCreate();dialogDict[dialogType].OnRefresh();}
public void CloseDialog(DialogType dialogType){
if (dialogDict.ContainsKey(dialogType)){dialogDict[dialogType].RemoveListener();dialogDict[dialogType].OnHide();dialogDict[dialogType].OnDestory();dialogDict[dialogType].GetView().Dispose();dialogDict.Remove(dialogType);}}}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
打開(kāi)界面判斷包是否加載,如果沒(méi)有則加載包再打開(kāi)界面?
第三份代碼是UI配置的管理
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using FairyGUI;
public class DialogConfigManager : BaseManager<DialogConfigManager>
{
public Dictionary<DialogType, DialogInfo> dialogDict;
public DialogConfigManager(){InitDialogConfig();}
public void InitDialogConfig(){dialogDict = 
new Dictionary<DialogType, DialogInfo>();dialogDict[DialogType.Main] = 
new DialogInfo(
"MainUI", 
"Win_Main");dialogDict[DialogType.Farm] = 
new DialogInfo(
"FarmUI", 
"Win_Farm");}
public DialogInfo 
GetDialogInfo(DialogType dialogType){
return dialogDict[dialogType];}
public BaseDialog 
GetDialogControl(DialogType dialogType){
switch (dialogType){
case DialogType.Main:
return new MainUIDialog();
case DialogType.Farm:
return new FramUIDialog();
default:
return null;}}
}
public class DialogInfo {
private string _packName;
private string _dialogName;
public DialogInfo(
string packName, 
string dialogName){_packName = packName;_dialogName = dialogName;}
public string GetPackName(){
return _packName;}
public string GetDialogName(){
return _dialogName;}}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
筆者的UI框架沒(méi)有采用AddComponent掛腳本的方法,因?yàn)槿绻^(guò)度使用,未來(lái)很難移植到lua中。?
界面配置管理通過(guò)GetDialogControl拿到每一個(gè)界面對(duì)應(yīng)的累,并將Component Set到類中,方便之后Find組件和控制。
using UnityEngine;
using System.Collections;
using FairyGUI;
public class BaseDialog {
private GComponent _view;
private DialogType _dialogType;
public BaseDialog(){}
public void SetDialogView(GComponent view){_view = view;}
public void SetDialogType(DialogType dialogType){_dialogType = dialogType;}
public GComponent 
GetView(){
return _view;}
public virtual void OnBeforeCreate(){}
public virtual void AddListener(){}
public virtual void RemoveListener(){}
public virtual void OnCreate(){}
                            
總結(jié)
                            
                                以上是生活随笔為你收集整理的Fgui入门了解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
                            
                            
                                如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。