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
我正在使用以下方法将对象放置在平面上。它有效,但锚点的位置始终是 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