当将Lua协程与C#一起使用时,是否有可能会产生可返回C#的Lua协程?

When using Lua coroutines with C#, is it possible to have a Lua coroutine that yields back to C#?

在我制作的游戏中,我主要使用C#进行开发,但我想使用Lua协程来处理一些游戏逻辑,因为它们可以很好地表示接管多帧的动作。我以前从未真正使用过Lua,所以我不确定这是否行得通。
理想情况下,我希望C#游戏更新功能能够将要执行的一个或多个Lua协程添加到队列中,然后每帧迭代队列,执行每个协程直到产生或完成。
我只想知道这是否可能,如果可以的话,如何实现它,因为它似乎不适合Lua使用的" lua_dofile"范式。

这里有一些C#伪代码来说明我的意思:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
GameUpdate()
{
  // Update game logic
  // (which may add one or more Lua coroutines to the queue)

  // Update input, physics, sound, etc

  // In Lua:
  //  For each coroutine in queue,
  //  execute it until it reaches a yield,
  //  or it finishes, whichever comes first
}

GameRender()
{
  // Render a frame
}

更新:本文(http://www.gamedev.net/topic/585128-luainterface-and-coroutines/)提供了我所寻找的答案。简而言之,这是可能的。


是的,有可能。它与" dofile范例"非常吻合:主机应用程序公开了一种脚本来注册供主机调用的回调的方法;例如RegisterEventHandler(foo)hostTypeInstance.OnFoo = foo等。

当主机运行用户脚本时,该脚本可以传递主机回调函数/协程,并且主机将句柄保存到它们。

只要单击鼠标或您提过要调用它们的任何其他操作,主机都可以在每一帧调用/恢复函数/协程。