日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Fgui入门了解

發布時間:2023/12/9 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Fgui入门了解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、UI插件的選擇

筆者第一個項目用的插件是NGUI,因為當時沒得選,市場上就有這一款插件供使用。自從Unity推出了自己的UGUI,大部分新的項目也相繼使用開來。我猜想主要原因是UGUI是Unity原生的,所以效率性能應該會好很多,兼容性也會提高。筆者兩款UI插件都有用過,但是從去年開始就關注Unity的第三款UI插件FairyGUI,發現此款插件有很多方便開發者的功能,加之筆者自己的實驗項目那就研究個沒嘗試過得好了,所以就選擇了FairyGUI。?
FairyGUI地址:http://www.fairygui.com/?
第一件事就是上官網下demo,看官網的視頻、帖子,加官方群詢問一些不了解的地方。筆者這里建議在問問題之前最好把自己能查到的能看到的東西都看完,這樣也是出于對作者的尊重,也不會讓自己遭人嫌棄。

二、語言的選擇

說個好玩的事情,筆者想寫自己的項目不是一天兩天了,之前也放棄過一次,那時候覺得一個項目必須做好熱更新,有bug就要及時修復,還能更新出一些新玩法。但是筆者服務器的造詣尚淺,那時候沒有找到如果做到lua協議熱更新,如果協議不能熱更新那么能更新的新功能的太少,在尋找探索的過程中也就放棄了。?
當然筆者現在還是不太會服務器羅馬不是一天建成的所以此次先用c#寫項目,但是我會減少對c#的依賴,等哪天搞定的服務器,就將框架移植到lua中

三、UI插件的使用

FGUI在Unity方面的使用主要關注的是“包”也就是Package。你如果想顯示一個UI界面,首先需要找到UI界面所引用的包,將這些包加載進來(UIPackage.AddPackage),你才能看到UI的界面(UIPackage.CreateObject)。?
所以UI框架的第一個任務是需要管理Package的加載與卸載,還有Component的顯示。?
那么第一份代碼就是管理包

using UnityEngine; using System.Collections; using System.Collections.Generic; using FairyGUI;public class UIPackageManager : BaseManager<UIPackageManager> {//記錄包是否Add的字典private Dictionary<string, bool> packageAddDict = new Dictionary<string, bool>();/// <summary>/// 將一個UI包add進來/// </summary>/// <param name="packageName">UI包名</param>public void AddPackage(string packageName){if (CheckPackageHaveAdd(packageName) == false){UIPackage.AddPackage("UI/"+packageName);}}/// <summary>/// 檢查UI包是否已經包進來/// </summary>/// <param name="packageName">UI包名</param>public bool CheckPackageHaveAdd(string packageName){return packageAddDict.ContainsKey(packageName);}/// <summary>/// 清理沒有用到的UI包/// </summary>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

通過一個字典來記錄UI的包是否已經加載進來,筆者在想何時卸載,由于是第一款小游戲暫時先不做的那么詳細(我懶),如果UI資源比較少,完全可以不卸載。也可以等applicationDidReceiveMemoryWarning過來卸載沒有用到的資源,這就涉及UI界面與包的引用關系了,等我想明白再開一貼記錄。?
下面第二份代碼是界面的管理

using UnityEngine; using System.Collections; using System.Collections.Generic; using FairyGUI;public class DialogManager : BaseManager<DialogManager> {Dictionary<DialogType, BaseDialog> dialogDict = new Dictionary<DialogType, BaseDialog>();/// <summary>/// 打開界面/// </summary>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();}/// <summary>/// 關閉界面/// </summary>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

打開界面判斷包是否加載,如果沒有則加載包再打開界面?
第三份代碼是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框架沒有采用AddComponent掛腳本的方法,因為如果過度使用,未來很難移植到lua中。?
界面配置管理通過GetDialogControl拿到每一個界面對應的累,并將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;}/// <summary>/// 創建前期 主要用于尋找view上的組件/// </summary>public virtual void OnBeforeCreate(){}/// <summary>/// 添加監聽事件/// </summary>public virtual void AddListener(){}/// <summary>/// 刪除添加事件/// </summary>public virtual void RemoveListener(){}/// <summary>/// 創建成功 主要用于邏輯注冊/// </summary>public virtual void OnCreate(){}/// <summary>

總結

以上是生活随笔為你收集整理的Fgui入门了解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。