参考 : 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、效果展示: