您的位置:首页 > 编程语言 > Lua

xlua入门(3)c#调用Lua脚本

2018-02-27 23:30 411 查看
xlua入门(3)c#调用Lua脚本

using UnityEngine;
using System.Collections;
using XLua;

public class InvokeLua : MonoBehaviour
{
//创建一个接口用于映射lua里的table
//也可以用clas或者struct, Dictionary<>, List<>
//各个映射的优劣可以看下XLUA教程文档
[CSharpCallLua]
public interface ICalc
{
int Add(int a, int b);
int Mult { get; set; }
}

//映射Lua中的方法
[CSharpCallLua]
public delegate ICalc CalcNew(int mult, params string[] args);

private string script = @"
local calc_mt = {
__index = {
Add = function(self, a, b)
return (a + b) * self.Mult
end
}
}

Calc = {
New = function (mult, ...)
print(...)
return setmetatable({Mult = mult}, calc_mt)
end
}
";
// Use this for initialization
void Start()
{
LuaEnv luaenv = new LuaEnv();
Test(luaenv);//调用了带可变参数的delegate,函数结束都不会释放delegate,即使置空并调用GC
luaenv.Dispose();
}

void Test(LuaEnv luaenv)
{
luaenv.DoString(script);
//获得Calc表中的New方法,映射到委托
CalcNew calc_new = luaenv.Global.GetInPath<CalcNew>("Calc.New");
//运行委托获得设置元表过后的table,映射到接口,对应Add方法和Mult属性,设置Mult为10
ICalc calc = calc_new(10, "hi", "john"); //constructor
Debug.Log("sum(*10) =" + calc.Add(1, 2));
//修改Mult
calc.Mult = 100;
Debug.Log("sum(*100)=" + calc.Add(1, 2));
}

// Update is called once per frame
void Update()
{

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