【问题标题】:Instantiating C# Classes in Lua在 Lua 中实例化 C# 类
【发布时间】:2014-05-15 16:06:11
【问题描述】:

我正在使用 LuaInterface 库为我的游戏编写脚本引擎。尝试在 Lua 中实例化类时出现错误。错误是:

"./Scripts/sv_worldgen.lua:2: attempt to call global 'Campfire' (a string value)"

sv_worldgen.lua 在哪里(整体):

function GenerateChunk(worldChunk, chunkGridPosition)
    tf = Campfire()
    tf:SetPosition(chunkGridPosition)
end

Campfire 是 C# 中的一个类,并且根据 CLRPackage exampleLuaInterface Reference 似乎暴露于 lua。我似乎无法解决这个错误,并且我已经尽职尽责地进行了搜索。我可以管理的脚本的唯一其他行为会引发类似的错误,但它是"(a table value)"。我究竟做错了什么?提前谢谢!

我试过明确地做Campfire._ctor(),但_ctor()是一个字符串值。

【问题讨论】:

  • 你是如何将你的类暴露给 lua 的?你是如何在 lua 中加载它的?
  • LoadScript("sh_CLRPackage.lua") 然后import "JASG"。我已经更新了这个问题。这现在告诉我Campfire 是一个字符串值。
  • 你将不得不展示 Campfire 是如何暴露在 Lua 中的。没有那个,就没法说了。
  • @Schollii lua["Campfire"] = typeof(Campfire); 告诉我 Campfire 是一个用户数据值。如果我忽略它并让 luainterface 完成访问我的程序集类的工作,则错误在 "attempt to call method 'SetPosition' (a string value)" 的下一行
  • 可能问题出在 C# 级别。显示产生问题的最小 .cs。

标签: c# lua luainterface


【解决方案1】:

通过使用 CLRPackage 并使用它首先加载程序集解决了这个问题。

//Lua
JASG = CLRPackage("JASG", "JASG")

只有这样你才能将类名链接到实际的 C# 类使用(这必须在尝试在 Lua 中访问它之前完成):

//Lua
Campfire=JASG.Campfire;

然后可以通过

进行正常的实例化
//Lua
cf = Campfire()

【讨论】:

    猜你喜欢
    • 2014-08-05
    • 1970-01-01
    • 2020-12-15
    • 2023-03-19
    • 1970-01-01
    • 2019-04-06
    • 2016-02-09
    • 1970-01-01
    • 2010-09-07
    相关资源
    最近更新 更多