NLua:无法将类型 'Command[]' 的 object 转换为类型 'System.Object[]'

NLua: Unable to cast object of type 'Command[]' to type 'System.Object[]'

我有一个使用 NLua 编写脚本的游戏引擎。但是,我似乎无法访问 Command 数组中的元素:

-- Basic direction detection. This allows forward and backward to cancel each other out if both are active.
function DetectXHoldDirection()
    directionDetect = 0
    if self.MainBuffer.Hold[0].Directions:HasFlag(Direction.Forward) then
        directionDetect = directionDetect + 1
    end
    if self.MainBuffer.Hold[0].Directions:HasFlag(Direction.Back) then
        directionDetect = directionDetect - 1
    end
end

MainBufferBufferedCommand 类型的 object,它包含 Command 结构数组,称为 "Hold," "Release," 和 "Press." Command 结构包含两个枚举属性,Buttons,类型为 Button(标志枚举),Directions 类型为 Direction(另一个标志枚举)。

当我尝试 运行 这个脚本时,我得到了标题中的错误。为什么要转换为 System.Object[]?有什么办法可以解决这个问题吗?

感谢 LuaInterface docs 的提示,我解决了这个问题,我相信这是 NLua 的基础。

显然你不能在 NLua 中以这种方式访问​​数组。这很烦人,但你必须像这样使用 Array.GetValue() 方法:

-- Basic direction detection. This allows forward and backward to cancel each other out if both are active.
function DetectXHoldDirection()
    directionDetect = 0
    if self.MainBuffer.Hold:GetValue(0).Directions:HasFlag(Direction.Forward) then
        directionDetect = directionDetect + 1
    end
    if self.MainBuffer.Hold:GetValue(0).Directions:HasFlag(Direction.Back) then
        directionDetect = directionDetect - 1
    end
end

同样,我不喜欢这样,但是如果有人有任何方法可以将其转换为正确的数组索引,我很想知道!但就目前而言,这就是我想要的。