前面一篇文章中,我們講到了 如何使用 Tolua 框架去加載一個面板(Panel),但是這個方法不是很適用於我們加載單個的 Prefab 資源,所以在這套框架中我們還有其他的一些套路。
先關閉LuaBundleMode
先關閉LuaBundleMode
先關閉LuaBundleMode
1、首先我們新建一個 Prefab 出來,將它放在 LuaFramework 下邊兒的 UI 裏邊,
2、處理 C# 中的 Packager 中的 HandleExampleBundle()方法,
這裏說一下 這個地方的 packager . HandleExampleBundle()方法中調用到的 AddBuildMap()方法的重載
(1)第一個是包名,即打包後在StreamingAssets目錄中顯示的包的名稱,AppConst.ExtName是擴展名,框架默認爲".unity3d",可以自行修改;
(2)第二個參數是打包模式,以字符串形式過濾出要打包的文件名,比如這裏*.prefab就表示源目錄下的所有prefab文件。
(3)第三個參數是要打包的資源的目錄,暫且稱爲源目錄;
注意:在這個地方需要注意的是單個資源和多個資源的打包:
1、如果打包一個資源一個預製件的時候,那麼就是直接將資源名稱填到第一個參數裏邊,然後第二個參數不變,第三個參數直接就是資源的父級文件夾。
2、如果說需要打包多個資源的話,那麼第一個參數傳遞的就直接爲 我們父級的文件夾名稱,注意的是需要小寫,然後第二個參數依然是不變的,第三個參數傳遞的依然是打包的資源目錄
爲了驗證我我們到底是否成功的進行了打包,所以這裏有一個辦法可以進行鑑定:
打開我們的資源管理器:
使用記事本打開我們剛剛創建出來的 uipanel.unity3d.manifest 文件;你可以看到如下:
這個地方是有兩個 .prefab 文件的,那麼這樣就驗證了我們打包 ab 包成功。
3、資源包有了以後我們就是需要在 代碼中 去動態的進行加載了。
打開我們上一篇文章中創建的那個 MainPanelCtrl lua 腳本,然後
作如下更改:
MainPanelCtrl = {};
local this = MainPanelCtrl;
local message;
local transform;
local gameObject;
-- 構建函數--
function this.New()
return this;
end
function this.Awake()
panelMgr:CreatePanel('Main', this.OnCreate);
end
-- 啓動事件--
function this.OnCreate(obj)
gameObject = obj
transform = obj.transform
message = gameObject:GetComponent('LuaBehaviour')
--ui.unity3d資源包
resMgr:LoadPrefab("ui.unity3d",
{
"Img_List",
"Btn_StartPlay"
},
function(ui)
log(ui.Length); -- 輸出 1
log(ui[0].name) -- 輸出 Img_List
local go = newObject(ui[0]) -- 實例化
local btn = newObject(ui[1])
go.transform:SetParent(transform) -- 設置父對象
go.transform.localPosition = Vector3(-300,70,0)
btn.transform:SetParent(transform)
btn.transform.localPosition = Vector3(-290,-200,0)
end);
end
最後成功加載