91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-06-12 12:14:02 來源:網絡 閱讀:4894 作者:一條非洲人 欄目:游戲開發

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

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

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

2.[NoToLuaAttribute]改為[BlackListAttribute]

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

4.執行lua的方法

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

5.帶返回值的lua方法調用

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

這個時候LuaUIHelper已經不報錯了。

接下來我們要生成和FairyGui關聯的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#靜態調用Lua的配置(包括事件的原型),僅可以配delegate,interface
[CSharpCallLua]
public static List<Type> CSharpCallLua = new List<Type>() {
    typeof(EventCallback0),
    typeof(EventCallback1)
};

}
用Generate Code生成一下

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

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

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

--可覆蓋的函數(可選,不是說必須)
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

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

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

2.調用了tolua的函數tolua.setpeer,看了一下源碼和百度,發現是用來繼承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

再運行一下,期待的畫面出現了

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

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

太仓市| 会东县| 子洲县| 长沙市| 桂阳县| 乐至县| 自治县| 白玉县| 龙游县| 漳州市| 精河县| 乳山市| 镇巴县| 大同市| 织金县| 寻甸| 浙江省| 龙山县| 临夏县| 营口市| 禹州市| 兴海县| 烟台市| 喀什市| 边坝县| 镇坪县| 营山县| 云南省| 安阳县| 彩票| 汉阴县| 定陶县| 平乡县| 隆子县| 开封县| 威远县| 海宁市| 元江| 安泽县| 体育| 石林|