Tolua for Unity3d 編譯位元組碼

2021-08-25 08:09:37 字數 3245 閱讀 7625

想必折騰過tolua的都知道, 為了最簡化對lua檔案的支援。最優方案就是  把lua檔案 以檔案的形式載入。而不是用 assetbundle 的方式。這樣會最優化的使用 lua本身的一些檔案 機制。

那麼既然是 以lua檔案的形式 載入肯定不能以 明文的形式了。 tolua已經為我們 提供了 位元組碼加密的機制。

以上就是 tolua 為我們整合 編譯位元組碼的 工具。 對於 tolua 載入 文字的.lua 檔案和 位元組碼的.lua  檔案是沒有區別的。應為tolua底層已經為我們實現了。

目前來看只是有一點不太友好,就是在 ios 平台 armv7 和 arm64 的 位元組碼不能共用。言外之意就是 要麼你編譯兩種位元組碼。要麼你 你直接用明文的 lua 檔案。要麼 你只支援一種 cpu型別。

顯然編譯兩種位元組碼是最優的方案; 對於編譯細節在 luaframework_ugui  已經詳細介紹了

/// /// 適用於 ios arm64

///

///

///

private void encodeluafile_64(string srcfile, string outfile)

",srcfile, outfile);

string currdir = directory.getcurrentdirectory();

directory.setcurrentdirectory(exedir);

system.diagnostics.processstartinfo info = new system.diagnostics.processstartinfo();

info.filename = luaexe;

info.arguments = args;

info.windowstyle = system.diagnostics.processwindowstyle.hidden;

info.useshellexecute = iswin;

info.errordialog = true;

system.diagnostics.process pro = system.diagnostics.process.start(info);

pro.waitforexit();

directory.setcurrentdirectory(currdir);

}/// /// 適用於 ios armv7 所有 android

///

///

///

private void encodeluafile_32(string srcfile, string outfile)

", srcfile, outfile);

string currdir = directory.getcurrentdirectory();

directory.setcurrentdirectory(exedir);

system.diagnostics.processstartinfo info = new system.diagnostics.processstartinfo();

info.filename = luaexe;

info.arguments = args;

info.windowstyle = system.diagnostics.processwindowstyle.hidden;

info.useshellexecute = iswin;

info.errordialog = true;

system.diagnostics.process pro = system.diagnostics.process.start(info);

pro.waitforexit();

directory.setcurrentdirectory(currdir);

}

獲取跟多的細節

現在我們已經編譯出來了 不同的 lua 位元組碼: 經過反覆測試我得到 一下結論

用 luajit64.exe  編譯出來的位元組碼 只適用於 ios arm64,

用 luajit32.exe 編譯出來的位元組碼  只適用於 其他( ios armv7,   android )

有意思的 android 目前 不管 armv7 還是 arm64 都只能使用  luajit32.exe 編譯出來的位元組碼

別人總結的:

2023年8月22日 補充:

其實對於位元組碼的理解應該是這樣的:  32位和64位的 位元組碼是對應的  目標機器,即 32位機器和64位機器。 很顯然tolua 已經為我們實現了 32位和64的 不同位元組碼的支援!。

所以呢我們只要為 相應的目標平台提供 對應的位元組碼就好了!

這是我最初的方案! 統計所有的機型 來判斷 是32還是64! 現在看來 很漏記!

往下看:

private static listdevicetypes = new list()

;public class devicetype

}

這個是是我找到的 最新的方案

/// /// 判斷當然 執行 品台是 x86 還是 x68_x64

///

public static bool isx86_x64

else}}

我已經在各個平台上測試了,都能準確分析出當前的 cpu結構!包括在編輯器 模式下

所以呢 我們就理所當然的 為我們的 目標平台提供對應的 位元組碼了

Dust3D 3D 建模工具

dust3d 是乙個 開源建模工具,可以用它快速建立 low poly 模型,用於遊戲製作 動畫製作以及 3d 列印模型製作,既適合有經驗的模型師建立雕刻前的基礎模型,也適合像作者這樣的新手 會一點點 blender 製作低面遊戲模型。目前已經完成建模 骨骼繫結自動生成 貼圖自動展開 環境光遮蔽自動...

D3D基本框架 即D3D標頭檔案分類

了dxut的結構 後,發現微軟程式設計師的編碼風格太深奧了。各種巨集定義 預編譯跳得頭暈,由於對於window api的不精通,導致寫出符合dxut風格的框架以現在的水平來看是不可能的。既然沒有弄通dxut,我也暫時不想套用了,那麼還是先自己用自己的框架來寫把。框架如下 雖然沒學會dxut,但是微軟...

d3d矩陣變換

1.d3d的繪製流水線 區域性座標系 模型空間 世界座標系 觀察座標系 背面消隱 光照 裁剪 投影 視口變化 光柵化 每個3d模型都有自己的空間,空間的中心 原點 就是模型的中心。世界空間就是物體 模型 存在的地方。世界的中心就是原點 0,0,0 注意螢幕中間的那一點不是世界空間的中心點,螢幕中間的...