在ARkit中,我有兩個節點,例如子彈節點和目標節點,
子彈節點在下面
let body = SCNPhysicsBody(type: .dynamic, shape: SCNPhysicsShape(node: bullet, options: nil))
body.isAffectedByGravity = false
bullet.physicsBody = body
bullet.physicsBody?.applyForce(SCNVector3(orientation.x*power, orientation.y*power, orientation.z*power), asImpulse: true)
bullet.physicsBody?.categoryBitMask = BitMaskCategory.bullet.rawValue
bullet.physicsBody?.contactTestBitMask = BitMaskCategory.target.rawValue
bullet.physicsBody?.collisionBitMask = BitMaskCategory.target.rawValue
目標節點在下面
let boundingSphere = targetNode!.boundingSphere;
let radius = boundingSphere.radius;
let center = boundingSphere.center;
let sphereShape = SCNSphere(radius: CGFloat(radius));
var shape = SCNPhysicsShape(geometry: sphereShape, options: [SCNPhysicsShape.Option.scale : targetNodeScale * 1.1])
targetNode?.physicsBody = SCNPhysicsBody(type: .dynamic,shape: shape)
targetNode?.physicsBody?.isAffectedByGravity = false
targetNode?.physicsBody?.categoryBitMask = BitMaskCategory.target.rawValue
targetNode?.physicsBody?.contactTestBitMask = BitMaskCategory.bullet.rawValue | BitMaskCategory.target.rawValue
targetNode?.physicsBody?.collisionBitMask = BitMaskCategory.target.rawValue | BitMaskCategory.bullet.rawValue
targetNode?.setValue(0, forKey: "hitCount")
我發現當這兩個節點相互碰撞時,下面的方法幾乎同時連續呼叫了兩次,但它應該只發生一次。
func physicsWorld(_ world: SCNPhysicsWorld, didBegin contact: SCNPhysicsContact) {
}
有時它發生了,有時沒有,所以我認為可能應該添加一些碰撞精度,有誰知道如何做那部分?謝謝
uj5u.com熱心網友回復:
didBegin(contact:) 似乎為 2 個節點之間的每個接觸點呼叫,所以是的 - 它可能會被呼叫多次。
根據您在他們聯系時所做的事情將決定如何撰寫聯系邏輯以將其考慮在內。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/396600.html
