Swift 物理形状与对象不匹配';接触时的形状

Swift 物理形状与对象不匹配';接触时的形状,swift,scenekit,arkit,Swift,Scenekit,Arkit,我有两个物体,当它们都接触时,我希望发生一些事情。一个对象是SCNSphere,另一个对象是SCNCylinder。唯一的问题是,当我把球扔向圆筒时,即使有间隙,它们似乎也在接触。如果我把它扔到很远的地方,它就会像预期的那样工作。我如何才能使联系人准确无误,并留下任何空白?看起来PhysicsShape与对象的形状不匹配。我希望它是准确的。有什么帮助吗 我的气缸代码: let scorer = SCNCylinder(radius: 0.02, height: 0.01) let materia

我有两个物体,当它们都接触时,我希望发生一些事情。一个对象是SCNSphere,另一个对象是SCNCylinder。唯一的问题是,当我把球扔向圆筒时,即使有间隙,它们似乎也在接触。如果我把它扔到很远的地方,它就会像预期的那样工作。我如何才能使联系人准确无误,并留下任何空白?看起来PhysicsShape与对象的形状不匹配。我希望它是准确的。有什么帮助吗

我的气缸代码:

let scorer = SCNCylinder(radius: 0.02, height: 0.01)
let material = SCNMaterial()
material.diffuse.contents = UIImage(named: "basketballSkin.png")
scorer.materials = [material]

let scorerNode = SCNNode(geometry: scorer)

scorerNode.worldPosition = SCNVector3(x: 0, y: -1.35, z: -1.4)

let physicsShapesc = SCNPhysicsShape(node: scorerNode, options:[SCNPhysicsShape.Option.type: SCNPhysicsShape.ShapeType.concavePolyhedron])

let physicsBodysc = SCNPhysicsBody(type: .static, shape: physicsShapesc)

scorerNode.physicsBody = physicsBodysc
ScoreNode.physicsBody?.categoryBitMask=BodyType.scorer.rawValue
ScoreNode.physicsBody?.collisionBitMask=BodyType.scorer.rawValue | BodyType.ball.rawValue
ScoreNode.physicsBody?.contactTestBitMask=BodyType.scorer.rawValue | BodyType.ball.rawValue

我的球代码:

let ball = SCNSphere(radius:0.04)
   // Bucketnode.scale = SCNVector3Make(0.2,0.2,0.2);
    let material = SCNMaterial()
    material.diffuse.contents = UIImage(named: "basketballSkin.png")
    ball.materials = [material]

    let ballNode = SCNNode(geometry: ball)

    ballNode.position = cameraPosition

    let physicsShape = SCNPhysicsShape(node: ballNode, options:nil)

    let physicsBody = SCNPhysicsBody(type: .dynamic, shape: physicsShape)

    ballNode.physicsBody = physicsBody


    let forceVector:Float = 2.7

    ballNode.physicsBody?.applyForce(SCNVector3Make(cameraPosition.x * forceVector, cameraPosition.y * forceVector, cameraPosition.z*forceVector), asImpulse: true)

    ballNode.physicsBody?.categoryBitMask = BodyType.ball.rawValue
    //ballNode.physicsBody?.collisionBitMask = BodyType.ball.rawValue | BodyType.scorer.rawValue
    ballNode.physicsBody?.contactTestBitMask = BodyType.ball.rawValue | BodyType.scorer.rawValue

    sceneView.scene.rootNode.addChildNode(ballNode)

  DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { // change 2 to desired number of seconds
 ballNode.removeFromParentNode()


   }

考虑到SCNPhysicsShape.ShapeType结构的定义,类型键的“几何体”值指定了SceneKit在基于几何体创建物理形状时使用的细节级别。选项集可能无法按预期工作:

let physicsShapesc = SCNPhysicsShape(node: scorerNode, options:[SCNPhysicsShape.Option.type: SCNPhysicsShape.ShapeType.concavePolyhedron])

除此之外,球向桶的移动速度有多快?“凹面多面体”似乎是渲染要求最高的类型

如何降低球的速度?我似乎找不到解决办法(我刚刚尝试改变物理世界的速度,它是一样的。实际上,我的ScoreNode是放在一个桶内的,但它记录了接触,即使在接触桶的边界时也是如此。这是我的问题。你知道是什么原因吗>找到了我的解决方案。我必须为场景中的所有对象设置接触位掩码,即使我不需要任何contact来自他们的通知。:D