前面一篇文章中,我们讲到了 如何使用 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
最后成功加载