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
MainBuffer
是 BufferedCommand
类型的 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
同样,我不喜欢这样,但是如果有人有任何方法可以将其转换为正确的数组索引,我很想知道!但就目前而言,这就是我想要的。
我有一个使用 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
MainBuffer
是 BufferedCommand
类型的 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
同样,我不喜欢这样,但是如果有人有任何方法可以将其转换为正确的数组索引,我很想知道!但就目前而言,这就是我想要的。