框架筆記 記錄XLua的簡單接入

2021-10-13 18:33:38 字數 2512 閱讀 1938

閱前提示

本系列為作者在學習框架與編寫框架時的心得與筆記

適合人群:all

閱讀方式:工具文章

本系列會不斷更新,如果對你有所幫助,點讚收藏吧:)

文章目錄

閱前提示

xlua

配置[luacallcsharp]

[csharpcalllua]

初始化小節

xlua

xlua的快速使用正如它的文件中所描述的那樣,僅僅三行就完事了~

xlua.luaenv luaenv = new xlua.luaenv();

luaenv.dostring(「cs.unityengine.debug.log(『hello world』)」);

luaenv.dispose();12

3接下來就是如何將這三行所包含的內容接入到我們的工程框架中了。

配置在使用unity做開發的過程中,多多少少在用到lua時會需要和c#進行一些資料互動。在xlua中,無論是[luacallcsharp]還是[csharpcalllua]用到的乙個方式:wrap。

wrap,可以理解成**「包裝」**。比如 我們想要在lua中獲取unity中的乙個gameobject,那我們lua中的**基本上會寫成如下的形式

local gameobject = cs.unityengine.gameobject.find(「name」)

1可以看出,這基本上和我們在c#端的書寫方式並沒有什麼差別,但實際上他們的原理卻很不一樣。

很明顯的一點,lua的資料型別根本無法支援gameobject,所以我們引入了wrap。無論使用xlua還是tolua,在初始化的過程中必不可少的是將我們可能需要使用到的c#類、方法包裝起來,以便在lua中可以相對應的進行資料傳遞。當我們在lua中需要呼叫c#的方法時,將通過入棧出棧的方式將 「資料」 進行傳遞(注:這裡的資料是經過處理的每個object的id),最終完成lua與c#的資料互動。

[luacallcsharp]

講到著,大致是說清楚了我們在配置什麼了… 根據自身的需求將需要在lua中被呼叫的東西都配置好。

[luacallcsharp]

public static list luacallcsharp = new list()12

3456

78910

1112

1314

1516

1718

19[csharpcalllua]

​ 當然,也可以配置c#直接呼叫lua的callback,著一般會配合luacallcsharp中的具體方法來使用。具體配置**xlua中也提供了參考這裡**太長了就不再放出了。

初始化配置說完後,我們就可以針對一開始提及的三行**進行初始化了。

xlua.luaenv luaenv = new xlua.luaenv();

啟動xlua,建立luaenv例項,這裡面會做xlua初始化的工作,其中就包含了wrap配置中的內容。

luaenv.dostring(「cs.unityengine.debug.log(『hello world』)」);

載入lua指令碼,xlua提供了dostring()提供了兩種方式:string/byte ,實際上最終都是變為byte。

用例中的該方式比較直接,適合用來做簡單的性測使用,一般專案中並不會這麼用。

xlua提供了luaenv.addloader(customloader loader) 方法,讓我們自定義載入指令碼的載入器。

public delegate byte customloader(ref string filepath);

只需定義乙個返回值為 byte 的方法即可。

luaenv.dispose();

dispose就過多介紹了,在關閉的時候當然是需要對其進行釋放的~

這樣,xlua的接入就已經算是初步完成了。以下是作者框架中的相關**

//初始化

public override void init()

//載入器

public byte xlualoader(ref string filename)

});if(filepath.isemptyornull())

return null;

return file.readallbytes(filepath);

#endif}1

2345

6789

1011

1213

1415

1617

1819

2021

2223

2425

2627

2829

3031

3233

3435

3637

小節因為作者目前還處於緩慢地擼框架階段,所以對於xlua的使用並沒有很深入的了解,也沒有淌過xlua的坑,所以目前就不再這裡在多說太多啦。就作者來言,對比了tolua,xlua我覺得在接入上面會舒服很多。(因為二者我都接入了,因為我希望我的框架hotscript部分能滿足所有的lua使用者~)

推薦閱讀:xlua在unity中的用法摘要.....

記錄xxl job的接入

第一步 先導入pom檔案 com.xuxueli xxl job core 2.1.2 要注意版本號 相對應的版本號 對應的cinfig和方法不一樣 第二步 匯入xxl的config配置類 import com.xxl.job.core.executor.impl.xxljobspringexecu...

專案後期Lua接入筆記01 框架及IDE

專案做到後期時,有一些要求行比較高的模組需要做到無bug,及時更新,這些模組一般是活動系統,充值系統等,但是後期接入的話要考慮現有c 的框架。今天開始記錄一下遇到的一些坑。框架選擇上,選的是tolua框架,主要是以前有過ulua的一些經驗,相對來說熟悉度搞一些。當然也不是純粹的外掛程式框架,是基於外...

XLua框架學習(三)C 訪問Lua中的全域性函式

function add print add endusing xlua luaenv luaenv newluaenv luaenv.dostring require csharpcalllua 需要先將lua指令碼載入進來 action add1 luaenv.global.get action...