RealityKit – 为什么 AnchorEntity 位置总是 (x: 0, y: 0, z: 0)

RealityKit – Why AnchorEntity position is always (x: 0, y: 0, z: 0)

我正在使用以下方法将对象放置在平面上。它有效,但锚点的位置始终是 0,0,0,即使它基于光线投射结果。

let results = arView.raycast(from: tappedLocation, 
                         allowing: .estimatedPlane, 
                        alignment: .horizontal)

if let result = results.first {

    print(result.worldTransform)    // contains values 
    let anchor = AnchorEntity(raycastResult: result)
    print(anchor.position)          // why 0,0,0 
}

有什么想法吗?

替代方法

如果 .init(raycastResult:) 不起作用,请使用带有 .init(world:) 初始值设定项的替代方法。

fileprivate func raycaster() {
        
    guard let query = arView.makeRaycastQuery(from: arView.center,
                                          allowing: .existingPlaneInfinite,
                                         alignment: .horizontal)
    else { return }

    if let result = arView.session.raycast(query).first {

        let anchor = AnchorEntity(world: result.worldTransform)
        anchor.addChild(self.yourModel)
        arView.scene.anchors.append(anchor)
    }
}

然后:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

    self.raycaster()
}

修改您的代码

此外,您可以修改代码,添加以下行:

let anchor = AnchorEntity(raycastResult: result)
let transform = Transform(matrix: result.worldTransform)
anchor.transform = transform