Scenekit hitTestWithSegment只返回第一个命中(突然之间)

时间:2018-02-05 19:14:55

标签: xcode swift3 scenekit

基本上hitTestWithSegment仅返回第一个命中。

我有多个节点在Z轴上以1到3的行移动。类似于摇滚乐队的游戏。当一行2个或更多行通过该段时,它只返回左侧的第一个节点。

hit = scene.rootNode.hitTestWithSegment(from: SCNVector3(-3, 0, 0) , to: SCNVector3(3, 0, 0), options: nil)

if hit.count > 0{
   print(hit.count)
}

输出:1

我也尝试将选项设置为

[SCNHitTestOption.firstFoundOnly.rawValue: false]

我得到同样的东西。

我不知道出了什么问题。 hitTestWithSegment一直按预期工作,直到我今天打开xcode。我没有做任何更改,没有软件更新,现在它的工作方式不同。我剥离了所有代码,基本上只是命中测试,我一次不能超过1次

编辑:我找到了一个解决方法,但我不明白它为什么会起作用或者为什么它首先破坏了。

我将我从:换成:向量(3,0,0),( - 3,0,0),它再次起作用

反转段应该只更改首先返回的节点数量,而不是多少节点。

编辑:这不是在iOS上,而是在Mac上

1 个答案:

答案 0 :(得分:4)

Apple决定通过更改hittest功能的默认行为让IOS 11中的所有人大吃一惊。从IOS 11开始,你需要明确告诉hittest搜索所有节点,而不仅仅是返回第一个命中结果:

hitTestOptions[SCNHitTestOption.searchMode] = SCNHitTestSearchMode.all.rawValue as NSNumber

如果多个节点被击中,这将把它设置回到返回一组hitresults。