ToLua(LuaFramework) - 如何使用ToLua去加载一个面板(一)

参考 : https://www.cnblogs.com/imteach/p/10630099.html

实例介绍:
首先我们在 vscode 中打开 lua 文件。
在这里插入图片描述
从这里大概就可以推测出来这套框架是采用到了 MVC 的结构:对区块进行一个划分
XxxPanel :负责页面的显示逻辑,显示层
XxxCrrl :负责事件处理,控制层
但是有意思的是好像没有找到 具体的能得到的 Model 层。
然后继续往下面走的话就是可以在 Logic/Game.lua 中找到游戏入口,也就是 下边的:
在这里插入图片描述
这个函数里边儿,三个比较重要的逻辑就是:

1、初始化 View
2、初始化 Ctrl
3、启动 Ctrl

1、初始化 VIEW 这个 就是调用的 InitViewPanels 这个函数,在 Game.lua文件中的
在这里插入图片描述
在这里插入图片描述
可以看到是这样的
在这里插入图片描述
2、紧接着就是初始化 Ctrl 这个依然还是在 我们的 lua 中的:
在这里插入图片描述
3、启动我们的 Ctrl 控制器
启动 的时候,我们的 CtrlNames 会找到对应的实例,然后调用里边儿的 Awake()方法
那么它的位置就是在这个地方:
在这里插入图片描述
开发步骤:

由上面的分析中,我可以知道,首先我们初始化 View,然后创建 Ctrl 实例化,然后调用 Ctrl 中的 Awake()方法,这些大概就是一个流程,但是这些的前提都是需要一个 Panen(Clone) 预制件的
1、创建预制件
2、创建对应的 XxxPanel 脚本(使用 LuaFramework就不需要了,因为 GameManager 身上自带)
3、创建对应的 Ctrl 脚本
4、创建 CtrlNames 以及 PanelNames
5、加载 XxxCtrl
6、加载对应脚本
7、GetRealAssetPath Error : >> xxx.unity.3d
8、效果展示

那么接下来我们一步一步实现。
1、准备工作:首先创建我们的 Prefab,并且将它放在我们的 LuaFramework/UIPanel/SetPanel
在这里插入图片描述
2、接下来创建咱们的 SetPanel.lua 脚本
它的位置是在 Lua/View/SetPanel.lua注意这里是
在这里插入图片描述

local transform;
local gameObject;
--设置面板类
SetPanel = {};
local this = SetPanel;

--启动事件--
function SetPanel.Awake(obj)
    gameObject = obj;
    transform = obj.transform;
    --初始化
    this.InitPanel();
    logWarn("Awake lua--->>"..gameObject.name);
end

--初始化面板--
function SetPanel.InitPanel()
    logWarn("初始化面板---------------------------------------------------------");
end

--单击事件--
function SetPanel.OnDestroy()
    logWarn("OnDestroy---->>>");
end

3、接下来创建咱们的 SetCtrl.lua 脚本
它的位置是在 Lua/Controller/SetCtrl.lua注意这里是 lua脚本

在这里插入图片描述

SetCtrl = {};
local this = SetCtrl;

local message;
local transform;
local gameObject;

--构建函数--
function SetCtrl.New()
    logWarn("SetCtrl.New--->>");
    return this;
end

function SetCtrl.Awake()
    logWarn("SetCtrl.Awake--->>");
    panelMgr:CreatePanel('Set', this.OnCreate);
end

--启动事件--
function SetCtrl.OnCreate(obj)
    gameObject = obj;

    message = gameObject:GetComponent('LuaBehaviour');

    --这句要注释掉,因为我们的FirstPanel中没有按钮
    --message:AddClick(MessagePanel.btnClose, this.OnClick);

    logWarn("Start lua--->>"..gameObject.name);
end

--单击事件--
function SetCtrl.OnClick(go)
    destroy(gameObject);
end

--关闭事件--
function SetCtrl.Close()
    panelMgr:ClosePanel(CtrlNames.);
end

4、添加 CtrlNames 和 PanelNames
在Lua/Common找到define.lua
在这里插入图片描述
5、加载 XxxCtrl
在Lua/Logic/Game.lua文件的Game.OnInitOK函数中,将CtrlManager.GetCtrl()的参数修改为我们刚刚添加的CtrlNames.Set,如下所示:
在这里插入图片描述
在Lua/Logic/CtrlManager.lua脚本的Init方法,对所有Ctrl的New方法进行了调用。
我们添加对FirstCtrl.New的调用,如下:
在这里插入图片描述
6、加载对应的脚本
在这里插入图片描述
7、接下来到了重点。也就是你可能会遇到 打包的时候出现问题。OK 不要慌,慢慢来
在这里插入图片描述
报错是这样的。
那么我们应该怎么做呢?
(1) 找到LuaFramework/Scripts/ConstDefine/AppConst.cs文件中的
在这里插入图片描述
(2)我们之前刚把Lua代码AssetBundle模式关掉(设置为false),lua代码不用AssetBundle模式了,但我们的资源(SetPanel预制体)还 是使用的AssetBundle模式。并且资源的AssetBundle模式好像无法关闭,因此需要对SetPanel预制体进行打包操作。
找到LuaFramework/Editor/Packager.cs文件的代码,包名为"set",如下所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
全是细节上面的工作。so 一定要有耐心
在这里插入图片描述
如果说看到了 StreamingAssets 下边儿有你想要打包的 预制体文件的话,基本上就没问题了,如果还是还有问题的话,就检查下lua 脚本是不是写错了。最有效的方法就是打断点进行调试
8、效果展示:
在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值