我正在尝试确定旋转节点的路径中是否存在可能的联系。我的想法是进行增量旋转(对于90度i循环10次9度)并且每次都进行接触测试。我的问题是,即使我每次调用updateCollisionPairs(),即使路径中有对象,联系人也是空的。这是一张以某种方式(前向)说明它的图片:
我尝试将节点A旋转90度,但在我需要检查"路径是否清晰之前#34; - 在这种情况下,节点B阻碍了我预计会有一个或多个增量旋转命中。
节点A和节点B都是类型.kinematic,带有categoryBitMask 2
Normaly我正在更新physicsWorld模拟后在渲染循环(willRenderScene)中进行接触测试,这触发得很好,所以我知道我的物理实体& 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 !!!!")
}
}
答案 0 :(得分:0)
看起来我只是错过了代码,上面的代码工作正常,如果它放在渲染器中(:willRenderScene) - 我初步尝试在gestureRecogniser触发的方法中直接执行它。相反,我现在只需设置标志并在下一帧渲染之前执行检查:
func renderer(_ renderer: SCNSceneRenderer, willRenderScene scene: SCNScene, atTime time: TimeInterval) {
... check for flag and perform contact test
}