《ULUA的简洁用法》
作者: 游蓝海
文章链接:http://blog.csdn.net/you_lan_hai/article/details/51059510
转载请注明出处
ULUA(http://www.ulua.org/index.html)所推荐的几种framework虽然功能强大,但是结构比较复杂,对于unity初学者来说太过麻烦和冗余。因此我自己总结了一套很简洁的用法,抛开MVC和各种框架,直接使用tolua(https://github.com/topameng/tolua)实现Unity和LUA的交互。
本文介绍的所以代码,我已经上传到了GitHub,链接见文章末尾。下面介绍实现的详细步骤。
1.原理
给GameObject添加上一个C#脚本组件作为中间层,在中间层上绑定上一个LUA脚本,将Unity的所有回调接口通过中间层传递到LUA。同时,LUA脚本也可以通过中间层操作GameObject。
2.准备
- 获取tolua:https://github.com/topameng/tolua。
tolua是一个工具,将Unity的C#代码包装之后导出给LUA,同时提供了一些访问LUA的接口,使得Unity和LUA可以相互调用。 - 简单起见,直接用Unity编辑器打开tolua工程。
本文使用的tolua版本是1.0.4,Unity版本是5.2.2。
3.添加C#中间层
新建C#脚本,命名为LuaBehaviourScript.cs。下面是文件的核心内容(无关紧要的代码已经删除,可在文章末尾链接中获得完整代码):
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
4.添加LUA脚本层
在Assets/Lua目录下新建LUA脚本Test.lua,核心代码如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
5.辅助脚本
由于各个GameObject的初始化先后顺序不好统一,而且考虑到多个场景切换的情况,tolua提供的LuaClient
就没那么好使了。所以我增加了一个LuaMainInstance
的单例类,在其构造的时候就初始化一个全局的LuaState,供LUA脚本使用。
由于不使用LuaClient
,所以LuaLooper
也无法直接使用了,我就添加了一个派生类LuaWatchdog
,用于启动LuaLooper
。
6.总结
将LuaBehaviourScript.cs添加给GameObject之后,并设置上要绑定的Lua模块名称。当GameObject Awake的时候,会自动加载绑定的LUA脚本文件,并创建出脚本对象。后续所有的Untity回调函数,都会通过脚本对象传递到LUA层。
完整代码下载地址:https://github.com/youlanhai/tolua
打开Test场景,点击播放,你会看到立方体在垂直方向上下移动。移动的逻辑,就是在Test.lua中实现的。