Unity WebGL MoonSharp使用
发表于2018-10-22
当前Unity的代码更新方案基本都选择的ULua,而有的项目还需要考虑Web平台,ULua不支持WebGL,所以决定选择MoonSharp。
MoonSharp是一个纯C#实现的Lua解释器,支持多种平台,其中就包括webgl。
一、 MoonSharp支持属性标签[MoonSharpUserData]或者UserData.RegisterType()注册一个C#类,这样就可以愉快的在lua中调用了,类似tolua中的_GT(MyClass)。
[MoonSharpUserData]
class MyClassStatic
{
public static double calcHypotenuse(double a, double b)
{
return Math.Sqrt(a * a + b * b);
}
}
double MyClassStaticThroughInstance()
{
string scriptCode = @"
return obj.calcHypotenuse(3, 4);
";
// Automatically register all MoonSharpUserData types
UserData.RegisterAssembly();
Script script = new Script();
script.Globals["obj"] = new MyClassStatic();
DynValue res = script.DoString(scriptCode);
return res.Number;
}
或者
class MyClass
{
public double CalcHypotenuse(double a, double b)
{
return Math.Sqrt(a * a + b * b);
}
}
static double CallMyClass2()
{
string scriptCode = @"
return obj.calcHypotenuse(3, 4);
";
// Register just MyClass, explicitely.
UserData.RegisterType<MyClass>();
Script script = new Script();
// create a userdata, again, explicitely.
DynValue obj = UserData.Create(new MyClass());
script.Globals.Set("obj", obj);
DynValue res = script.DoString(scriptCode);
return res.Number;
}
二、MoonSharp中“:”和“.”的使用官网说99.999%概率它俩是一样的,tolua中的”:”和“.”的使用就需要注意,经验如下:
1.C#中静态方法,还是按照静态方法调用(也就是“.”调用) 2.C#中的public方法,按照域名的方式调用(类似C++的域)(也就是“:”调用) 3.Lua中的全局方法,直接“.”调用 4.lua中调用C#的构造函数直接使用就行,如TestClass(参数1,参数2...)
三、MoonSharp没有现成的框架,得自己一点点造轮子了。
四、其它的跟后续使用再加。
