Scenekit hitTestWithSegment 只返回第一个命中(突然)
Posted
技术标签:
【中文标题】Scenekit hitTestWithSegment 只返回第一个命中(突然)【英文标题】:Scenekit hitTestWithSegment only returns first hit (all of a sudden) 【发布时间】:2018-07-15 17:45:04 【问题描述】:基本上 hitTestWithSegment 只返回第一个命中。
我有多个节点在 Z 轴上按 1 到 3 行移动。类似于摇滚乐队之类的游戏。当一行2个或更多行通过segment时,只返回左边第一个节点。
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 上
【问题讨论】:
看这个问题的答案:***.com/questions/46352867/… 也就是说,从ios 11.0开始需要将searchmode选项设置为all。 谢谢,这行得通。它应该作为答案而不是评论提供吗? 我将它作为评论发布,因为我正准备将其报告为重复,但即使答案是,另一个问题也不完全相同。我会发布它作为答案。很高兴它成功了。 在我看来,片段的方向在这里不应该起任何作用,无论选项设置为仅返回第一个命中还是所有命中。还是我错过了什么? 【参考方案1】:Apple 决定通过更改 hittest 函数的默认行为来让 IOS 11 中的每个人都大吃一惊。从 IOS 11 开始,您需要明确告诉 hittest 搜索所有节点,而不仅仅是返回第一个命中结果:
hitTestOptions[SCNHitTestOption.searchMode] = SCNHitTestSearchMode.all.rawValue as NSNumber
如果命中多个节点,这会将其设置为返回命中结果数组。
【讨论】:
知道为什么 hitTestWithSegment() 需要选项字典中的字符串吗?在其他任何地方(例如在 SCNSceneRenderer 的 hitTest() 中)它都需要适当的结构值,这更有意义......以上是关于Scenekit hitTestWithSegment 只返回第一个命中(突然)的主要内容,如果未能解决你的问题,请参考以下文章