在ToLua的实际使用中,我们不可能只在lua脚本中使用unity内置的类方法,也有可能使用到自己写的C#类或者方法,那么怎么实现呢?这个时候就需要用到Wrap数据绑定了,我们可以自己一点点写绑定,也可以直接使用内置工具去实现。
步骤如下:
1.写出自己的C#类结构;
using System;
using System.Collections;
namespace HYX
{
public class MyClass
{
public const string name = "huangyuxiang";
}
}
2.开始绑定数据,打开绑定类CustomSettings,并将自己刚刚写的MyClass类绑定进去。
很简单,这样就绑定好了,接下来我们使用工具去生成绑定实现类。
a.点击上面的菜单栏 Lua -> Clear wrap files 去清空之前的绑定文件。
b.点击上面的菜单栏 Lua -> GenerateAll 开始生成绑定文件。
绑定完成后我们可以在Source->Generate文件夹中看见多了一个类HYX_MyClassWrap,这个就是Tolua帮我们生成的绑定类文件,大家可以打开看一下。
//this source code was auto-generated by tolua#, do not modify it
using System;
using LuaInterface;
public class HYX_MyClassWrap
{
public static void Register(LuaState L)
{
L.BeginClass(typeof(HYX.MyClass), typeof(System.Object));
L.RegFunction("New", _CreateHYX_MyClass);
L.RegFunction("__tostring", ToLua.op_ToString);
L.RegVar("name", get_name, null);
L.EndClass();
}
[MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
static int _CreateHYX_MyClass(IntPtr L)
{
try
{
int count = LuaDLL.lua_gettop(L);
if (count == 0)
{
HYX.MyClass obj = new HYX.MyClass();
ToLua.PushObject(L, obj);
return 1;
}
else
{
return LuaDLL.luaL_throw(L, "invalid arguments to ctor method: HYX.MyClass.New");
}
}
catch (Exception e)
{
return LuaDLL.toluaL_exception(L, e);
}
}
[MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
static int get_name(IntPtr L)
{
try
{
LuaDLL.lua_pushstring(L, HYX.MyClass.name);
return 1;
}
catch (Exception e)
{
return LuaDLL.toluaL_exception(L, e);
}
}
}
- 接下来就开始说一下怎么去使用了,新建一个文本文件,重命名为ScriptsFromFile.lua,打开编辑;
print("test data1 -- >" ..HYX.MyClass.name) --打印绑定的HYX命名空间下的MyClass类下的name变量。