生活随笔
收集整理的這篇文章主要介紹了
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>
{
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
通過一個字典來記錄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>();
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
打開界面判斷包是否加載,如果沒有則加載包再打開界面?
第三份代碼是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;}
public virtual void OnBeforeCreate(){}
public virtual void AddListener(){}
public virtual void RemoveListener(){}
public virtual void OnCreate(){}
總結
以上是生活随笔為你收集整理的Fgui入门了解的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。