我已经发现了问题的原因。下面已经发布了答案。
编辑:问题已经改变,请参阅“问题”部分。
我正在使用 LuaInterface。使用这个库的 lua 函数的通用调用有这个签名LuaFunction.Call(params object[] args)
。我创建了一个包装函数,它从库中捕获异常并将它们格式化以显示在游戏内控制台窗口上。
我正在尝试调用一个 lua 函数,但它没有接收到参数。这是 C# 中的行
Game.Instance.scriptEngine.Call("GenerateChunk", chunks[chunkID], GetChunkGridPosition(chunkID));
这只是简单地包装了对这个 Lua 函数的调用,该函数接受两个参数:
//lua
function GenerateChunk(worldChunk, chunkGridPosition)
Log(LogLevel.Error, worldChunk.ToString());
Log(LogLevel.Error, chunkGridPosition.ToString());
end
它只是回调一个 C#Log
函数(正确解析,并且在 Lua 上下文中可见)。
问题是我"invalid arguments to method call"
在尝试调用该GenerateChunk
函数时从 luainterface 收到错误,并将其返回:
invalid arguments to method call
at JASG.ScriptEngine.LuaError(Exception ex) Scripting\ScriptEngine.cs:line 144
at JASG.ScriptEngine.Call(String fnName, Object[] args) Scripting\ScriptEngine.cs:line 86
at JASG.ChunkManager.WakeChunk(Int32 chunkID) World\ChunkManager.cs:line 123
at JASG.ChunkManager.GetChunk(Int32 chunkID, Boolean wakeIfAsleep) World\ChunkManager.cs:line 53
我尝试了各种调用该方法的ScriptEngine.Call
方法,尝试将参数包装在 object[] 数组等中,但没有骰子。任何想法为什么 lua 没有收到我传递的论点?我已经验证了两个参数在传入时在 C# 中都是非空的。