Unity WebGL MoonSharp使用

发表于2018-10-22
评论0 3k浏览
当前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没有现成的框架,得自己一点点造轮子了。

四、其它的跟后续使用再加。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引