使用点击手势识别器时未检测到几何元素,但它检测到body-splitcontainers-split123

时间:2019-04-29 13:09:39

标签: ios swift scenekit

我有一个包含我的身体模型的Scenekit文件。我在我的主要scenekit文件中使用它。当我单击诸如手,脚,手臂,头等身体部位时,我想打开不同的场景。主体是具有多个几何元素的单个节点。当我点击时,它可以正确检测分配给该几何体的材质,但不会显示它是哪个几何体元素,它显示的名称类似于body-splitcontainer-split4。因此,我需要获取几何元素。我正在制作3D视图应用。

我通过分别打印节点本身,名称和属性来检查它。它还不会检测几何元素。当我使用geometryindex属性时,它返回0。

@objc func handleTap(_手势识别:UIGestureRecognizer){         //检索SCNView

    let scnView = self.view as! SCNView

    // check what nodes are tapped

    let p = gestureRecognize.location(in: scnView)
    print(p)
    let hitResults = scnView.hitTest(p, options: nil)

    // check that we clicked on at least one object

    if hitResults.count > 0 {

    // retrieved the first clicked object

        let result = hitResults[0]

    // get the tapped node

        let index = result.node

    // Print the node name and geometry name

        let material = result.node.geometry?.firstMaterial
        print("Index is \(index.name)")
        print("Material is \(material?.name)")

    // highlight it

        SCNTransaction.begin()
        SCNTransaction.animationDuration = 0.5

    // on completion - unhighlight

        SCNTransaction.completionBlock = {
            SCNTransaction.begin()
            SCNTransaction.animationDuration = 0.5

            material!.emission.contents = UIColor.black

            SCNTransaction.commit()
        }

        material!.emission.contents = UIColor.yellow

        SCNTransaction.commit()
    }
}

我希望它能向我显示实际的几何元素名称,例如: body-Element0(用于头部) body-Element1(用于颈部) 但它向我展示 身体分裂容器分裂1 身体分裂容器分裂2 身体分裂容器分裂3 当我单击头部的不同部分时,所有这些都用于头部。 虽然显示正确的材料名称。 对于其手臂 身体分裂容器分裂22 等

1 个答案:

答案 0 :(得分:0)

我明白了。在刺激器中,我的材料已被选中,但未获取我的几何元素。但是,当我在实际设备中对其进行测试时,代码更合理了,它在检测我的几何元素,但返回了编码的第一个材料。因此,我制作了一个字典,并使用该字典将几何元素与其材料名称相关联,作为geometry.firstmaterial

的解决方法