一條非洲人--xlua整合fairyGui(一)-創(chuàng)新互聯(lián)

最近公司在改造舊項目,經(jīng)過討論后決定用fairyGUI重做UI部分,lua插件用xlua,戰(zhàn)斗部分用打補丁方式熱更新。
以下是整合的過程
首先新建一個xlua工程,把fairyGUi_unitySDk的源碼和luasupport拷過來

成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供冷水灘網(wǎng)站建設、冷水灘做網(wǎng)站、冷水灘網(wǎng)站設計、冷水灘網(wǎng)站制作等企業(yè)網(wǎng)站建設、網(wǎng)頁設計與制作、冷水灘企業(yè)網(wǎng)站模板建站服務,十載冷水灘做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡服務。

一條非洲人--xlua整合fairyGui(一)

這個時候luaUIHelper會報錯,我們從這個類開始修改。
1.using luaInterface改為using Xlua

2.[NoToLuaAttribute]改為[BlackListAttribute]

3.獲取luafunction:
peerTable.GetLuaFunction改為Get<LuaFunction>

4.執(zhí)行l(wèi)ua的方法

_OnInit.BeginPCall();
_OnInit.Push(this);
_OnInit.PCall();
_OnInit.EndPCall();
改為
_OnInit.Action<LuaWindow>(this);(無gc調(diào)用)
其他幾個函數(shù)如此類推

5.帶返回值的lua方法調(diào)用

extendFunction.BeginPCall();
extendFunction.Push(gcom);
extendFunction.PCall();
_peerTable = extendFunction.CheckLuaTable();
extendFunction.EndPCall();
改為
_peerTable = extendFunction.Func<GComponent,LuaTable>(gcom);(無gc調(diào)用)

這個時候LuaUIHelper已經(jīng)不報錯了。

接下來我們要生成和FairyGui關(guān)聯(lián)的wrap,直接貼代碼:
using XLua;
using System.Collections.Generic;
using System;
using FairyGUI;

public static class FairyGuiGenConfig
{
//lua中要使用到C#庫的配置,比如C#標準庫,或者Unity API,第三方庫等。
[LuaCallCSharp]
public static List<Type> LuaCallCSharp = new List<Type>() {
typeof(EventContext),
typeof(EventDispatcher),
typeof(EventListener),
typeof(InputEvent),
typeof(DisplayObject),
typeof(Container),
typeof(Stage),
typeof(FairyGUI.Controller),
typeof(GObject),
typeof(GGraph),
typeof(GGroup),
typeof(GImage),
typeof(GLoader),
typeof(GMovieClip),
typeof(TextFormat),
typeof(GTextField),
typeof(GRichTextField),
typeof(GTextInput),
typeof(GComponent),
typeof(GList),
typeof(GRoot),
typeof(GLabel),
typeof(GButton),
typeof(GComboBox),
typeof(GProgressBar),
typeof(GSlider),
typeof(PopupMenu),
typeof(ScrollPane),
typeof(Transition),
typeof(UIPackage),
typeof(Window),
typeof(GObjectPool),
typeof(Relations),
typeof(RelationType),
typeof(Timers),
typeof(GTween),
typeof(GTweener),
typeof(EaseType),
typeof(TweenValue),

    typeof(LuaUIHelper),
    typeof(GLuaComponent),
    typeof(GLuaLabel),
    typeof(GLuaButton),
    typeof(GLuaProgressBar),
    typeof(GLuaSlider),
    typeof(GLuaComboBox),
    typeof(LuaWindow)

typeof(GoWrapper)
};

//C#靜態(tài)調(diào)用Lua的配置(包括事件的原型),僅可以配delegate,interface
[CSharpCallLua]
public static List<Type> CSharpCallLua = new List<Type>() {
    typeof(EventCallback0),
    typeof(EventCallback1)
};

}
用Generate Code生成一下

這個時候我們可以試著用lua生成一個界面了
首先我們先實現(xiàn)調(diào)用Main的功能,具體實現(xiàn)看教程。
我們先自己編輯一個UI文件,新建Main.lua和MainPanel.lua
在Main.lua引入FairyGUI.lua
執(zhí)行一下,發(fā)現(xiàn)報錯,因為xlua調(diào)用cs類的時候要加上CS.
所以我們加上FairyGUI = CS.FairyGUI
啟動成功,開始寫邏輯,此處我用FairyGuiDemo里面的Model例子來修改,寫法是模仿官網(wǎng)上的例子
例子:
MainPanel = fgui.window_class()

local Resources = CS.UnityEngine.Resources
local Object = CS.UnityEngine.Object
local Vector3 = CS.UnityEngine.Vector3

--構(gòu)建函數(shù)
function MainPanel:ctor()
UIPackage.AddPackage('UI/Model');
end

--可覆蓋的函數(shù)(可選,不是說必須)
function MainPanel:OnInit()
self.contentPane = UIPackage.CreateObject('Model', 'Main')

local prefab = Resources.Load("Role/npc");
local  go = Object.Instantiate(prefab);
go.transform.localPosition = Vector3(61, -89, 1000);
go.transform.localScale = Vector3(180, 180, 180);
go.transform.localEulerAngles = Vector3(0, 100, 0);
self.contentPane:GetChild("holder").asGraph:SetNativeObject(GoWrapper(go));

end

function MainPanel:OnShown()
end

function MainPanel:OnHide()
end

調(diào)用:
local view = MainPanel.New();
view:Show();

運行一下,發(fā)現(xiàn)報錯了
1.由于xlua沒有bind New函數(shù),所以我們new對象要將
FairyGUI.LuaWindow.New()改為FairyGUI.LuaWindow()

2.調(diào)用了tolua的函數(shù)tolua.setpeer,看了一下源碼和百度,發(fā)現(xiàn)是用來繼承cs的,然后在百度一下xlua對應的api,最后在作者的github找到了https://github.com/Tencent/xLua/issues/405
最后將tolua.setpeer(ins, t)改為xutil.state(ins, t)

3.xlua不能訪問c#沒有的屬性,tolua會返回null,xlua就報錯了,后來筆者把這個屬性先放到lua這邊
將ins.EventDelegates = {}改為t.EventDelegates

再運行一下,期待的畫面出現(xiàn)了

一條非洲人--xlua整合fairyGui(一)
最基礎的功能實現(xiàn)了,下次我會記錄一下事件的修改。

項目Git:https://github.com/TaoOneOne/xLua_FairyGui_Demo
unity版本:5.6.5

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

本文名稱:一條非洲人--xlua整合fairyGui(一)-創(chuàng)新互聯(lián)
當前URL:http://muchs.cn/article36/dshjsg.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、電子商務網(wǎng)站制作、Google、手機網(wǎng)站建設關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應式網(wǎng)站建設