SCNHitTestOption.searchMode 使用

2020-11-23  本文已影响0人  loongod

一、SCNHitTestOption.searchMode 使用

            let dic:[SCNHitTestOption: Any]? = [SCNHitTestOption.boundingBoxOnly: true]
            let results = self.sceneView.hitTest(updatePosition, options: dic)
            print("count:\(results.count)")

如上代码,这样默认碰撞监测,只返回第一个碰撞到的物体,如果想把所有的碰撞结果都返回的话,需要设置

    @available(iOS 11.0, *)
    public static let searchMode: SCNHitTestOption // Determines whether the search should be exhaustive. Defaults to SCNHitTestSearchModeClosest.
// 确定搜索是否应该穷举。 默认为SCNHitTestSearchModeClosest。
@available(iOS 11.0, *)
public enum SCNHitTestSearchMode : Int {
    case closest = 0 // The closest object found.
    case all = 1 // All found objects sorted from nearest to farthest.
    case any = 2 // The first object found. This object is not necessarily the nearest.
}

但是设置了枚举之后,如下

let dic:[SCNHitTestOption: Any]? = [
  SCNHitTestOption.boundingBoxOnly: true, 
  SCNHitTestOption.searchMode: SCNHitTestSearchMode.all
]

一调用到这里的代码就会报崩溃

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: '-[__SwiftValue integerValue]: unrecognized selector sent to instance 0x281d0dbf0'

解决:这里直接使用原始值即可。

let dic:[SCNHitTestOption: Any]? = [
  SCNHitTestOption.boundingBoxOnly: true, 
  SCNHitTestOption.searchMode: 1
]
上一篇 下一篇

猜你喜欢

热点阅读