1.首先贴上C#代码
[csharp] view plain copy
public static int AddChild( IntPtr l )
{
Debug.Log( "栈大小 " + LuaDLL.lua_gettop( l ) );
Debug.Log( "type = " + LuaDLL.lua_type( l, 1 ) );
GameObject parent = ToLua.ToVarObject( l, 2 ) as GameObject;
if( parent != null )
{
Debug.Log( "创建对象 " + parent.name );
}
else
{
Debug.Log( "创建对象失败" );
}
string path1 = lua_.LuaToString( 3 );
string path2 = LuaDLL.lua_tostring( l, 3 );
string path3 = ToLua.ToString( l, 3 );
Debug.Log( "path 1 = " + path1 );
Debug.Log( "path 2 = " + path2 );
Debug.Log( "path 3 = " + path3 );
lua_.GetFunction( "Main" );
LuaDLL.lua_pcall( l, 0, 0, 0 );
return 1;
}
上面这段代码用来判断lua穿过来的参数
2.Lua代码
[php] view plain copy
function TestStatic()
--由生成的wrap文件调用
MyHelloWorld.Init()
--由生成的闭包去调用,本文用到的方式
local go = UnityEngine.GameObject.New("LuaObj")
LuaNTools.AddChild( go, "test")
end
LuaNTools的调用可用用点操作符(.)也可以用冒号操作符(:)
3.不同之处
1)使用点操作符,没用语法糖,即传给C#的参数数量即是lua里穿的数量。
2)使用冒号操作符,有语法糖,传给C#的参数数量比lua传的参数数量+1,因为第一个参数是Lua的表,即此处的LuaNTools
4.示意图
1)使用冒号
[html] view plain copy
local go = UnityEngine.GameObject.New("LuaObj")
LuaNTools:AddChild( go, "test")
2)使用点
[html] view plain copy
local go = UnityEngine.GameObject.New("LuaObj")
LuaNTools.AddChild( go, "test")
注意在获取Lua传递过来的参数时,栈的位置,点和冒号,在获取栈的位置差1