Я пытаюсь запустить функцию каждый кадр с Lua (привязан к моему коду C ++).
Все отлично работает с этим кодом (Вызывается каждый кадр, ведите журнал правильно):
Script.lua (функция OnUpdate)
function InputTest:OnUpdate(deltaTime)
self.x = self.x + deltaTime
if Inputs.GetKey(KEY_LEFT_SHIFT) then speed = 3 else speed = 1 end
if Inputs.GetKey(KEY_D) then self.x = self.x - deltaTime * speed end
if Inputs.GetKey(KEY_A) then self.x = self.x + deltaTime * speed end
if Inputs.GetKey(KEY_S) then self.z = self.z - deltaTime * speed end
if Inputs.GetKey(KEY_W) then self.z = self.z + deltaTime * speed end
if Inputs.GetKey(KEY_E) then self.y = self.y + deltaTime * speed end
if Inputs.GetKey(KEY_Q) then self.y = self.y - deltaTime * speed end
if Inputs.IsMousePressed(MOUSE_BUTTON_LEFT) then self:LogMousePosition() end
Debug.Log(self.x)
end
Но когда я добавляю test = self.owner:GetTransform()
Перед строкой Debug.Log(self.x)
Затем функция OnUpdate останавливается на добавленной строкепосле второго вызова (в консоли появляется только одна строка отладки, но то, что находится до того, как добавленная строка все еще работает, как и ожидалось).
Метод C ++ "GetTransform" успешно вызывается из Lua (простая точка останова подтвердила меняthis), и «владелец» отправляется в GetTransform (благодаря «:»).Адрес памяти для владельца одинаков во всех кадрах, но он все еще выполняется только один раз.
Реализация привязки актера
int OvCore::Scripting::Bindings::LuaActor::GetTransform(lua_State * L)
{
if (EasyLua::IsUserdata(1))
{
ECS::Actor* instance = static_cast<ECS::Actor*>(EasyLua::ToUserData(1));
EasyLua::PushNativeUserdataAsMetatable<ECS::Components::CTransform>(*instance->GetComponent<ECS::Components::CTransform>());
return 1;
}
return 0;
}
Реализация PushNativeUserdataAsMetatable
template<typename T>
inline void EasyLua::PushNativeUserdataAsMetatable(T& p_userdata)
{
EasyLua::PushNativeUserdata(static_cast<void*>(&p_userdata));
EasyLua::PushLuaTypeMetaTable<T>();
EasyLua::MoveToMetatable(-2);
}
Есть лиВ любом случае, нативный вызов может сначала увенчаться успехом, а каждый раз заканчиваться неудачей?Я что-то пропустил?