uLua学习笔记(三):Unity3D和Lua之间的相互调用
2015-08-11 13:20
537 查看
这篇笔记主要集中学习一下uLua和Unity3D之间相互调用的方法,我们导入了uLua之后,现在会弹出一个类似学习屏幕的东西,如下:
先赞一个!
将这个脚本绑定到场景摄像机机上运行即可查看结果。
为了足够简单,就用一个打印信息的静态方法。
幸运的是,这些文件不需要我们手动添加,只需要点击菜单栏的“lua”->“Clear LuaBinder File + Warp Files”先清空上次生成的包装文件,然后点击菜单栏“lua”->“gen Lua Warp File”重新生成包装文件即可。
我们会发现我们的类的包装文件以及创建好了:
运行结果如下:
先赞一个!
Unity3D调用Lua
Unity3D调用Lua的方法还是比较简单的,所以先说这个,由于这部分在学习笔记(一)中已经说的挺多的了,更多的内容点击这里回去看,所以这里我们就来看一个简单的示例即可:using LuaInterface; using UnityEngine; public class UnityCallLua : MonoBehaviour { private string lua = @" --两个数相加 function add(a, b) return a + b end --多返回值 function foo(a, b, c) return a + b, b + c, a + c end "; void Start() { //创建 lua 状态对象 LuaState luaState = new LuaState(); //运行脚本确保函数已经创建 luaState.DoString(lua); //获取函数 LuaFunction func = luaState.GetFunction("add"); //调用函数 object[] result = func.Call(5.2f, 1.3f); //打印结果 Debug.Log(result[0]); //多返回值函数调用 func = luaState.GetFunction("foo"); result = func.Call(5.2f, 1.3f, 2.8f); for(int i = 0; i < result.Length; i++) { Debug.Log(result[i]); } } }
将这个脚本绑定到场景摄像机机上运行即可查看结果。
Lua调用Unity3D
Lua调用Unity3D的方法实现上要稍微麻烦一点,具体有以下几个步骤:创建要被Lua调用的类
首先我们需要一个被Lua调用的类,如下:using UnityEngine; using System.Collections; public class MyClass : MonoBehaviour { public static void MyFunc() { Debug.Log("Lua call MyFunc!"); } void Start() { } void Update() { } }
为了足够简单,就用一个打印信息的静态方法。
绑定要被调用的类
打开uLua\Editor\BindLua.cs文件,找到binds静态数组,把我们新建的类添加进去,如下:生成包装文件
在使用之前我们需要先生成Unity可用的包装文件,即把Unity3D的类和方法注册到Lua中,这样Lua才能进行调用。幸运的是,这些文件不需要我们手动添加,只需要点击菜单栏的“lua”->“Clear LuaBinder File + Warp Files”先清空上次生成的包装文件,然后点击菜单栏“lua”->“gen Lua Warp File”重新生成包装文件即可。
我们会发现我们的类的包装文件以及创建好了:
添加注册信息
我们打开uLua\Lua\System\Wrap.lua文件,在最后添加我们新建的类,如下:开始调用
新建一个场景,把下面的脚本绑定到摄像机即可:using LuaInterface; using UnityEngine; public class LuaCallUnity : MonoBehaviour { private string lua = @" MyClass.MyFunc() "; void Start() { LuaScriptMgr luaMgr = new LuaScriptMgr(); luaMgr.Start(); LuaState luaState = luaMgr.lua; luaState.DoString(lua); } }
运行结果如下:
相关文章推荐
- 【整理】unity3d优化总结篇
- DoTween的小技巧
- 用Sublime Text 2 作IDE开发 Unity3D 项目(VinceLi)
- Unity3D 中 点乘和叉乘的应用
- 简单Unity时间架构设计(克洛诺斯之匙)
- Unity中创建二维码
- UNITY3D学习笔记14
- 【猫猫的Unity Shader之旅】之Vertex&Fragment Shader下的透明
- unity, UGUI Text fadeIn
- Unity2D学习笔记(一):sprite的基础操作
- [Unity3D]Unity3D发展偷看游戏初期阶段NGUI
- UNITY3D学习笔记13
- Visual studio 2015 community + Windows Driver Kit 10 +Vmware 11 配置驱动开发环境
- Unity3D中对象池的使用
- Unity中创建二维码
- Xcode7下面用Unity3D的一些尴尬问题.
- Unity中游戏的声音管理
- Unity ShaderLab< 一> 学习总结
- Unity3D ShaderLab<二>Shader属性
- UNITY3D学习笔记12