我创建了一个带有子框的AnchorEntity。当检测到水平面时,该框将自动添加到屏幕并放置在该平面上。 但是盒子在移动。 e。当检测到另一架飞机时。如何将EntityAnchor绑定到第一个平面并将其保持在同一位置? 谢谢!
let anchorEntity = AnchorEntity(plane: .horizontal, classification: .any, minimumBounds: [0.1, 0.1])
let box = MeshResource.generateBox(size: 1.0, cornerRadius: 0.1)
let metal = SimpleMaterial(color: .red, isMetallic: true)
let model = try ModelEntity(mesh: box, materials: [metal])
anchorEntity.addChild(model)
arView.scene.addAnchor(anchorEntity)
我尝试使用会话委托并仅设置一次转换,但这不能解决问题:
func session(_ session: ARSession, didUpdate frame: ARFrame) {
let screenCenter = CGPoint(x: arView.frame.midX, y: arView.frame.midY)
let results = arView.hitTest(screenCenter, types: [.existingPlane])
guard let result = results.first(where: { result -> Bool in
guard result.distance > 0.2 && result.distance < 3 || self.coachingOverlay.isActive else {
return false
}
guard let planeAnchor = result.anchor as? ARPlaneAnchor,
planeAnchor.alignment == .horizontal else {
return false
}
return true
}),
let planeAnchor = result.anchor as? ARPlaneAnchor else {
return
}
anchorEntity.transform = Transform(matrix: planeAnchor.transform)
arView.session.delegate = nil
...