Unity热更新专题(三)Unity热更新之LuaInterface(上)
2015-09-04 12:40
591 查看
Unity热更新专题(三)Unity热更新之LuaInterface(上)
1、什么是LuaInterface?
LuaInterface包括两个核心库,一个是LuaInterface.dll,一个是Luanet.dll,我们可以通过LuaInterface来完成Lua和C#(CLR)之间的互相调用。2、在CLR中执行Lua代码
创建一个C#工程,导入LuaInterface中的以下两个dll文件。并添加到引用。
修改Program.cs代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using LuaInterface; namespace LuaInterface { class Program { static void Main(string[] args) { Lua lua = new Lua();//创建Lua解释器 lua["num"] = 34; Console.WriteLine(lua["num"]); Console.ReadKey(); } } }
此时运行项目,可能会出现以下错误。
我们继续修改App.config文件如下:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version="v4.0" sku = ".NETFramework,Version=v4.0"/> <supportedRuntime version="v2.0.50727"/> </startup> </configuration>
再次运行:
就看到我们想要看到的结果了。
这就是LuaInterface的一个简单示例。
接下来让我们继续。
3、在C#中执行Lua脚本文件,或者脚本字符串
①Dostring
在上面的工程中,修改Program.cs代码如下:using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using LuaInterface; namespace LuaInterface { class Program { static void Main(string[] args) { Lua lua = new Lua(); //创建Lua解释器 lua.DoString("num=2"); lua.DoString("str='a string'"); object[] values = lua.DoString("return num,str"); foreach (object obj in values) { Console.WriteLine(obj); } Console.ReadKey(); } } }
执行结果:
②DoFile
在原工程目录下添加myLua.lua文件修改myLua.lua文件如下:
num = 2 string = "hello world" print(string)
修改Program.cs代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using LuaInterface; namespace LuaInterface { class Program { static void Main(string[] args) { Lua lua = new Lua(); //创建Lua解释器 lua.DoFile("myLua.lua"); Console.ReadKey(); } } }
记住先修改myLua.lua的属性:
否则可能会报出以下错误:
好了,让我们按F5看看输出结果。
结果如我们预期所料。
4、把一个C#方法注册进Lua的一个全局方法
①Lua和C#中类型的对应
②两个注册方法的使用
我们首先来看代码:using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using LuaInterface; namespace LuaInterface { class Program { public void CLRMethod() { Console.WriteLine("----->CLRMethod"); } public static void MystaticMethod() { Console.WriteLine("----->MystaticMethod"); } static void Main(string[] args) { Program p = new Program(); Lua lua = new Lua(); //创建lua的解释器 //注册类的普通方法到Lua中 lua.RegisterFunction("LuaMethod1", p, p.GetType().GetMethod("CLRMethod")); lua.DoString("LuaMethod1()"); //注册类的静态方法到Lua中 lua.RegisterFunction("LuaMethod2", null, typeof(Program).GetMethod("MystaticMethod")); lua.DoString("LuaMethod2()"); Console.ReadKey(); } } }
运行结果如下:
让我们来分析一下这两个方法:
哎呀~
先到这里吧。
下一篇再介绍怎么在Lua中使用C#的方法,访问C#的属性吧。
====================================================================================
结束。
相关文章推荐
- UNITY 将函数加入队列,并依次执行队列里的函数
- Unity热更新专题(二)Lua编程语言
- Unity热更新专题(一)热更新简介
- Shader以及Unity中的Shader
- Unity3d-Socket之龙一编年史network.dll分析(2)-> CNetLogger
- Unity3d-Socket之龙一编年史network.dll分析(2)-> CNetLogger
- Unity3D学习笔记《Space Shooter》二
- ubuntu 12.04 amd显卡驱动安装
- Unity3d使用UGUI实现长按功能
- Unity中xml的简单用法笔记
- Unity 相关经典博客资源总结
- Unity环境下的质数求解探究
- Unity3d触摸屏手势控制镜头旋转卡位到目标对象
- Unity 3D面试题
- Unity3d获取IOS设备唯一标识,以及IDFA
- unity 3d学习第二天
- Unity3D如何有效地组织代码?
- Unity3D手机游戏开发的一些笔记
- unity开发相关环境(vs、MonoDevelop)windows平台编码问题
- unity制作一个3d旋转菜单