ulua里如何将C#创建的UnityEngine对象返回给lua

发表于2018-08-07
评论0 2.5k浏览
本篇文章我们来看下如何将C#创建的UnityEngine对象返回给lua,以上一篇为例子。

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的接口,返回时对对象的操作注意调用方式是点还是冒号操作符。
来自:https://blog.csdn.net/yuxikuo_1/article/details/52305578

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