ulua里如何将C#创建的UnityEngine对象返回给lua
发表于2018-08-07
本篇文章我们来看下如何将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