Scenekit hitTestWithSegment only returns 第一次命中(突然)
Scenekit hitTestWithSegment only returns first hit (all of a sudden)
基本上只命中TestWithSegment returns第一次命中。
我有多个节点在 Z 轴上以 1 到 3 行的形式移动。类似于摇滚乐队之类的游戏。当一行 2 或更多通过线段时,它只 returns 左边的第一个节点。
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 次命中
编辑:我找到了一个解决方法,但我不明白它为什么有效或为什么它一开始就坏了。
我将我的 from: 换成: vectors (3, 0, 0), (-3, 0, 0) 并且它再次工作
反转段应该只改变首先返回哪个节点而不是多少。
编辑:这不在 iOS,它在 Mac
Apple 决定通过更改 hittest 函数的默认行为来给 IOS 11 中的每个人一个惊喜。由于 IOS 11 您需要明确告诉 hittest 搜索所有节点而不仅仅是 return 第一个命中结果:
hitTestOptions[SCNHitTestOption.searchMode] = SCNHitTestSearchMode.all.rawValue as NSNumber
如果有多个节点被命中,这会将其设置回return命中结果数组。
基本上只命中TestWithSegment returns第一次命中。
我有多个节点在 Z 轴上以 1 到 3 行的形式移动。类似于摇滚乐队之类的游戏。当一行 2 或更多通过线段时,它只 returns 左边的第一个节点。
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 次命中
编辑:我找到了一个解决方法,但我不明白它为什么有效或为什么它一开始就坏了。
我将我的 from: 换成: vectors (3, 0, 0), (-3, 0, 0) 并且它再次工作
反转段应该只改变首先返回哪个节点而不是多少。
编辑:这不在 iOS,它在 Mac
Apple 决定通过更改 hittest 函数的默认行为来给 IOS 11 中的每个人一个惊喜。由于 IOS 11 您需要明确告诉 hittest 搜索所有节点而不仅仅是 return 第一个命中结果:
hitTestOptions[SCNHitTestOption.searchMode] = SCNHitTestSearchMode.all.rawValue as NSNumber
如果有多个节点被命中,这会将其设置回return命中结果数组。