书接上回吧,还是以上一篇的作为例子。上一篇
1.lua代码
function TestStatic()
--由生成的wrap文件调用
MyHelloWorld.Init()
--由生成的闭包去调用,本文用到的方式
local go = UnityEngine.GameObject.New("LuaObj")
local obj = LuaNTools.AddChild( go, "test")
if obj ~= nil then
obj:SetActive(false)
end
end
这段代码中,我们通过LuaNTools调用了C#的AddChild方法,然后返回一个UserData对象,这个对象是一个GameObject,所以我们操作GameObject不可见。那么怎么传回来这个GameObject呢
2.C#代码
public static int AddChild( IntPtr l )
{
GameObject parent = ToLua.ToVarObject( l, 1 ) as GameObject;
if( parent == null )
{
Debug.Log( "parent is null" );
return 0;
}
string path = ToLua.ToString( l, 2 );
GameObject child = new GameObject( "child" );
if( child == null )
{
Debug.Log( "child is null" );
return 0;
}
child = NGUITools.AddChildNotLoseScale( parent, child );
child.transform.localScale = Vector3.one;
child.transform.localPosition = new Vector3( 10f, 10f, 0f );
//此处把创建的对象表返回给lua
ToLua.Push( l, child );
return 1;
}
从ToLua.Push,我们就把创建的GameObject传给了lua,注意,对child的设置,localScale和localPosition
3.效果
其实,任何类型都可以返回,注意ToLua的接口,返回时对对象的操作注意调用方式是点还是冒号操作符