translator.Push -C#传递值到lua栈

使用的地方

//UnityEngineComponentWrap.cs
[MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
static int _g_get_transform(RealStatePtr L)
{
    try {
    
#if L_LUA_PROFILER
UnityEngine.Profiling.Profiler.BeginSample("[c#]UnityEngine.Component:get_transform");
#endif

        ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
    
        UnityEngine.Component gen_to_be_invoked = (UnityEngine.Component)translator.FastGetCSObj(L, 1);
        translator.Push(L, gen_to_be_invoked.transform);
    } catch(System.Exception gen_e) {
            
#if L_LUA_PROFILER
UnityEngine.Profiling.Profiler.EndSample();
#endif

        return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
    }
        
#if L_LUA_PROFILER
UnityEngine.Profiling.Profiler.EndSample();
#endif

    return 1;
}
--lua调用
obj.transform

当lua层调用gameobject中的.tranform时,会调用到wrap里面的getter, 两个关键的地方translator.FastGetCSObj(L, 1);和translator.Push(L, gen_to_be_invoked.transform); 前者是从lua栈中得到传过来的gameobject,后者是将gameobject身上的transform压入lua栈。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

大纲

Share the Post:
滚动至顶部