Как разместить AnchorEntity в фиксированной позиции?

Я создал AnchorEntity с дочерним блоком. При обнаружении горизонтальной плоскости поле автоматически добавляется на экран и помещается в плоскость. Но коробка движется, т.е. когда обнаружена другая плоскость. Как вы можете привязать 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
    ...

0 ответов

Другие вопросы по тегам