我的第一条建议是不要使用 LUAInterface;因为它不是跨平台的,而是使用 IronPython,它和 LUA 一样容易上手,并且可以在 Windows 和 OSX 上运行,具体取决于您编写游戏的方式; XNA 和 OpenTK 应该在图形引擎的 mono 下跨平台工作。
我在自己的基于 vb.net 的游戏中使用 LUA 进行实验时发现了这一点,并最终决定使用 Iron python。
但假设您想坚持使用 LUA;这是您可以尝试的方法。
基于您知道的事实:
任何编写的 vb.net 代码在运行后都无法更改,您可以这样做:
Public Shared Lua as New LuaInterface
Sub Game()
Dim LuaCaller as New LuaAccess
Lua("LuaAccess") = LuaCaller
End Sub
Public Class LuaAccess
Public Sub Grant(NewClass as String, Variable as String)
Select Case NewClass
Case "LuaAccess"
Lua(Variable) = New LuaAccess
End Sub
End Class
然后来自 Lua:
LuaAccess:Grant("LuaAccess", "MyNewLuaAccess")
你可以为每个你希望 lua 能够创建实例的类添加一个新案例;并使用它来创建类的新实例。
如果您希望它能够修改主程序使用的活动类,只需将类中的子类或变量或两者共享
Public Shared MyVar as Integer
这样只有一个变量的副本,应用程序的任何部分(甚至 Lua)都可以修改它。
虽然老实说 IronPython 确实更适合这种事情,并且仍在积极开发中,不像 LuaInterface。
记住一件事;说到脚本,你真的不想给脚本引擎太多的控制权;特别是在游戏方面,您可以让他们访问您的引擎可以执行的所有操作;如果你不小心,这可以用来作弊。
祝你好运,我希望我有所帮助。
基于 LuaInterface 运行时 v2.0.50727
(使用Lua51.dll的那个)