首先在Hierarchy面板创建一个Button:
我需要把这个Button对象传递到lua脚本中,以便访问,所以创建UIManager脚本如上图。内容如下:
UIManager在运行时会自动获取Button的引用,然后在LuaHelper中添加如下代码:
只是为了再lua脚本中通过LuaHelper访问到UI管理器。
然后参考宏哥的博客文章一,文章二,添加EventTriggerListener.cs:
此脚本的目的其实只是为了能像NGUI一样注册回调函数,并且这个脚本是通用的,一旦编写基本不会变化,所以方便热更新。
把之前添加过的东西都注册进去:
一旦注册进去,EventTriggerListener中的委托和事件就会被自动注册,如下所示:
编写main.lua脚本,内容如下:
清理,构建,运行Unity,用鼠标点击屏幕上的按钮,结果如下:
其实不论是LuaHelper也好UIManager也好,都只是为lua访问c#中的某些元素提供方便,这些可以*定义,只要能满足要求。
这里我是事先就在Unity中创建好了Button,所以可以直接访问到,但实际项目中,一般都是动态创建组件,动态添加,这个时候就需要两个管理器了,一个是UIManager,管理开关,一个是ResManager管理加载做好的UI预制体,通过UIManager能自动获取到任何当前已打开的UI组件对象,这就好注册事件了。
这样,所有的操作都可以在lua脚本中进行,方便热更新。
另外有注册事件就要有移除事件,所以可以再封装一下,用来判断是否有该回调,以便移除。
请注意:LuaHelper内容我有做修改,Global是我自定义的全局管理脚本,整个ToLua框架原有代码我做了精简,大家不用非要参考我的代码,只需要用原有的框架,能够保证直接运行main.lua就可以了。
Base脚本其实就是继承自MonoBehaviour的空脚本,替换以前的View