В приложении, использующем ARKit
, я использую метод ARSCNPlaneGeometry
class update
для получения SCNGeometry
из ARPlaneGeometry
. Я получаю SCNPhysicsShape
из этой геометрии для использования в качестве SCNPhysicsBody
для плоского узла:
func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
guard let planeAnchor = anchor as? ARPlaneAnchor else { return }
// Plane Geometry
let planeGeometry = ARSCNPlaneGeometry(device: MTLCreateSystemDefaultDevice()!)
planeGeometry?.update(from: planeAnchor.geometry)
let planeNode = SCNNode(geometry: planeGeometry)
// Plane Physics
planeNode.physicsBody = SCNPhysicsBody(type: .static, shape: SCNPhysicsShape(geometry: planeGeometry!))
// Add Node to Scene
node.addChildNode(planeNode)
}
Проблема, с которой я столкнулся, заключается в том, что, хотя отображаемый узел плоскости является плоскостью, сгенерированная физическая форма - это не форма плоскости, а шероховатая сфера. Я знаю это, потому что я использую опцию отладки вида сцены .showPhysicsShapes
.
Я также постоянно обновляю форму геометрии и физики, используя renderer(_:didUpdate:for:)
метод ARSCNViewDelegate
, и форма остается прежней.
Кто-нибудь еще сталкивался с этой проблемой раньше?