您的位置:首页 > 移动开发 > Unity3D

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#的属性吧。

====================================================================================
结束。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: