[英]SceneKit - Instant contact detection using physicsWorld.updateCollisionPairs()
我試圖確定在旋轉節點的路徑中是否存在可能的接觸。 我的想法是做一個增量旋轉(對於90度,i循環10次,每次9度),並每次執行接觸測試。 我的問題是,即使每次我都調用updateCollisionPairs()時,即使路徑中有對象,聯系人也是空的。 這是一張以某種方式說明它的圖片(正面):
我正在嘗試將節點A旋轉90度,但是在我需要檢查“路徑是否清晰”之前-在這種情況下,節點B處於這種方式,因此我希望獲得一個或多個增量旋轉。
節點A和節點B均為.kinematic類型,類別為BitMask 2
通常,更新PhysicsWorld模擬后,我會在渲染循環(willRenderScene)中進行接觸測試,並且觸發得很好,所以我知道我的PhysicalBodies和contactBitmasks設置正確,但是在這種情況下,我不能等待其他循環出於明顯原因執行接觸檢測。
到目前為止,我嘗試過的代碼:
for i in 1...10 {
nodeA.transform = SCNMatrix4Mult(nodeA.transform, SCNMatrix4MakeRotation(GameHelper.deg2rad(deg:90)/10, 0, 0, 1))
nodeA.physicsBody.resetTransform()
self.scnScene.physicsWorld.updateCollisionPairs()
let contacts = self.scnScene.physicsWorld.contactTest(with: (nodeA.physicsBody)!, options: [SCNPhysicsWorld.TestOption.collisionBitMask:2])
print(contacts)
if contacts.count > 0 {
print("CONTACT !!!!")
}
}
看起來我只是放錯了代碼,如果將上面的代碼放在renderer(:willRenderScene)中,則上面的代碼可以正常工作-我最初嘗試直接在gestureRecogniser觸發的方法中執行該代碼。 相反,我現在只設置標志並在渲染下一幀之前執行檢查:
func renderer(_ renderer: SCNSceneRenderer, willRenderScene scene: SCNScene, atTime time: TimeInterval) {
... check for flag and perform contact test
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.