2016-11-06 4 views
2

iPhone 용 테스트 3D 게임을 만들려고하고 있지만 물리학에 빠져 있습니다. 자동차와 구급차가 서로 접촉하면 차가 사라지지 않습니까? 이전에 SpriteKit을 사용해 보았습니다. PhysicsWorld ContactDelegate를 스스로 설정해야한다는 것을 알고 있었지만 SceneKit에서이 작업을 수행하는 방법을 모르겠습니다. 아마도 이것이 문제입니까?SceneKit 물리학 연락처

코드 :

ambulance.physicsBody?.categoryBitMask = PhysicsCategory.ambulance 
ambulance.physicsBody?.contactTestBitMask = PhysicsCategory.car 

car.physicsBody?.categoryBitMask = PhysicsCategory.car 


func physicsWorld(_ world: SCNPhysicsWorld, didBegin contact: SCNPhysicsContact) { 
    let firstNode = contact.nodeA 
    let secondNode = contact.nodeB 

    if(firstNode.physicsBody?.categoryBitMask == PhysicsCategory.ambulance && secondNode.physicsBody?.categoryBitMask == PhysicsCategory.car || 
     firstNode.physicsBody?.categoryBitMask == PhysicsCategory.car && secondNode.physicsBody?.categoryBitMask == PhysicsCategory.ambulance){ 

     firstNode.physicsBody?.categoryBitMask = PhysicsCategory.ambulance 
     secondNode.physicsBody?.categoryBitMask = PhysicsCategory.car 

     secondNode.removeFromParentNode() 
    } 
} 

나는 누군가가 나를 도울 수 있기를 바랍니다! 감사!

편집 : 나는 자기에 장면의 contactDelegate을 설정하는 방법을 발견했습니다 : 같은 문제가 모두 들어

scene.physicsWorld.contactDelegate = self 

답변

1

: 내가 내 노드의 PhysicsBody을 설정하는 것을 잊었다. 내가 가진

코드 추가 :

ambulance.physicsBody = SCNPhysicsBody.dynamic() 
ambulance.physicsBody?.isAffectedByGravity = false 

car.physicsBody = SCNPhysicsBody.static()