小编Ant*_*RUZ的帖子

hitTest(_:options:) 无法识别 ARKit 平面后面的节点

我将一个对象放在墙上,然后尝试识别点击它,但命中测试返回 0 个对象。当我改变对象的 Z 位置并将其放置在更靠近凸轮的位置时,它被很好地识别,但这不是解决方案,因为平面总是在变化并且它可以随时覆盖对象。如何使 hitTest 正常工作并识别平面后面的节点?或者,也许,我使用了错误的方法?

fileprivate func addNode(atPoint point: CGPoint) {
    let hits = sceneView.hitTest(point, types: .existingPlaneUsingExtent)
    if hits.count > 0, let firstHit = hits.first, let originNode = originNode {
        let node = originNode.clone()
        sceneView.scene.rootNode.addChildNode(node)
        node.position = SCNVector3Make(firstHit.worldTransform.columns.3.x, firstHit.worldTransform.columns.3.y, firstHit.worldTransform.columns.3.z)
        let resize = simd_float4x4(SCNMatrix4MakeScale(0.2, 0.2, 0.2))
        let rotation = simd_float4x4(SCNMatrix4MakeRotation(.pi / 2, -1, 0, 0))
        let transform = simd_mul(firstHit.worldTransform, resize)
        let finalTransform = simd_mul(transform, rotation)
        node.simdTransform = finalTransform
        addedNodes.insert(node)
    }
}

func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) …
Run Code Online (Sandbox Code Playgroud)

scenekit swift arkit

2
推荐指数
1
解决办法
1361
查看次数

标签 统计

arkit ×1

scenekit ×1

swift ×1