ToLua学习笔记,使用委托,监听UGUI组件事件

首先在Hierarchy面板创建一个Button:

ToLua学习笔记,使用委托,监听UGUI组件事件

我需要把这个Button对象传递到lua脚本中,以便访问,所以创建UIManager脚本如上图。内容如下:

ToLua学习笔记,使用委托,监听UGUI组件事件

UIManager在运行时会自动获取Button的引用,然后在LuaHelper中添加如下代码:

ToLua学习笔记,使用委托,监听UGUI组件事件

只是为了再lua脚本中通过LuaHelper访问到UI管理器。

然后参考宏哥的博客文章一文章二,添加EventTriggerListener.cs:

ToLua学习笔记,使用委托,监听UGUI组件事件

此脚本的目的其实只是为了能像NGUI一样注册回调函数,并且这个脚本是通用的,一旦编写基本不会变化,所以方便热更新。

把之前添加过的东西都注册进去:

ToLua学习笔记,使用委托,监听UGUI组件事件
一旦注册进去,EventTriggerListener中的委托和事件就会被自动注册,如下所示:

ToLua学习笔记,使用委托,监听UGUI组件事件

编写main.lua脚本,内容如下:

ToLua学习笔记,使用委托,监听UGUI组件事件

清理,构建,运行Unity,用鼠标点击屏幕上的按钮,结果如下:

ToLua学习笔记,使用委托,监听UGUI组件事件

其实不论是LuaHelper也好UIManager也好,都只是为lua访问c#中的某些元素提供方便,这些可以*定义,只要能满足要求。

这里我是事先就在Unity中创建好了Button,所以可以直接访问到,但实际项目中,一般都是动态创建组件,动态添加,这个时候就需要两个管理器了,一个是UIManager,管理开关,一个是ResManager管理加载做好的UI预制体,通过UIManager能自动获取到任何当前已打开的UI组件对象,这就好注册事件了。

这样,所有的操作都可以在lua脚本中进行,方便热更新。

另外有注册事件就要有移除事件,所以可以再封装一下,用来判断是否有该回调,以便移除。

请注意:LuaHelper内容我有做修改,Global是我自定义的全局管理脚本,整个ToLua框架原有代码我做了精简,大家不用非要参考我的代码,只需要用原有的框架,能够保证直接运行main.lua就可以了。

ToLua学习笔记,使用委托,监听UGUI组件事件

ToLua学习笔记,使用委托,监听UGUI组件事件

Base脚本其实就是继承自MonoBehaviour的空脚本,替换以前的View

另外LuaManager内增加了对luaState的访问
以后的文章我不在对此说明了