충돌이 감지되지 않는 이유를 알 수 없습니다. 이유가 무엇인지 파악할 수 있기를 바랍니다. 문제가 많아서 올바르게 수행하는 방법을 배워야하기 때문입니다. 신속한 장면 킷.SceneKit 충돌 감지가 감지되지 않습니다.
좋아, 그래서 항상 나는이 문장으로 시작으로 :
override func viewDidLoad() {
super.viewDidLoad()
createScene()
scene.physicsWorld.contactDelegate = self
// This Statement.^
motionManager = CMMotionManager()
motionManager.startAccelerometerUpdates()
}
내가 충돌이 공 및 상자 노드 사이에 발생합니다. 내 상자 노드는 mainBox이고 내 공은 공입니다. bodyNames의 출처
ball.position = SCNVector3Make(0, 1.75, 3)
ball.geometry = ballGeometry
ballMaterial.diffuse.contents = UIColor.greenColor()
ballGeometry.materials = [ballMaterial]
scene.rootNode.addChildNode(ball)
ball.physicsBody = SCNPhysicsBody(type: .Dynamic, shape: SCNPhysicsShape(geometry: ballGeometry, options: nil))
ball.physicsBody?.angularVelocityFactor = SCNVector3Make(0, 0, 0)
ball.physicsBody?.angularVelocity = SCNVector4Make(0, 0, 0, 0)
ball.name = "sphere"
ball.physicsBody?.categoryBitMask = bodyNames.Person
ball.physicsBody?.contactTestBitMask = bodyNames.Floor
ball.physicsBody?.collisionBitMask = bodyNames.Floor
ball.physicsBody?.affectedByGravity = true
ball.addChildNode(cameraNode)
mainBox.position = SCNVector3Make(0, -0.75, 2)
mainBox.geometry = mainBoxGeometry
mainBoxMaterial.diffuse.contents = UIColor.whiteColor()
mainBox.physicsBody?.categoryBitMask = bodyNames.Floor
mainBox.physicsBody?.contactTestBitMask = bodyNames.Person
mainBox.physicsBody?.collisionBitMask = bodyNames.Person
mainBox.physicsBody = SCNPhysicsBody.staticBody()
mainBoxGeometry.materials = [mainBoxMaterial]
mainBox.name = "floor"
scene.rootNode.addChildNode(mainBox)
이제 마법이 일어나는 곳뿐만 아니라, 마법이 발생하지 않습니다 ...
func physicsWorld(world: SCNPhysicsWorld, didBeginContact contact: SCNPhysicsContact) {
let nodeA = contact.nodeA
let nodeB = contact.nodeB
if nodeA.physicsBody?.categoryBitMask == bodyNames.Person && nodeB.physicsBody?.categoryBitMask == bodyNames.Floor || nodeA.physicsBody?.categoryBitMask == bodyNames.Floor && nodeB.physicsBody?.categoryBitMask == bodyNames.Person {
print("I collided with the damn box.")
}
}
아, 그리고이 일이다.
struct bodyNames {
static let Person = 0x1 << 1
static let Floor = 0x1 << 2
}
응답해야 할 코드를 더 추가해야하는지 알려 주시면 기꺼이 알려 드리겠습니다.
의
physicsBody
여부를 확인해야 mainBox' physicsBody를 사용하기 전에 physicsBody 자체를 설정하십시오. –매우 간단한 수정이지만 현재 제대로 작동합니다. 감사. @JamesP –