我正在为visionOS构建一个应用程序,它将文本附加到图像上。我看到有一个我使用的图像 AnchorEntity。问题是附加文本不可见。 我通过日志确认正在运行的 ARKitSession 检测到了正确的图像。
这是正确的做法吗?
这是我的代码:
import Foundation
import SwiftUI
import ARKit
import RealityKit
struct ImmersiveView: View {
let session = ARKitSession()
let imageInfo = ImageTrackingProvider(
referenceImages: ReferenceImage.loadReferenceImages(inGroupNamed: "documentphoto")
)
var body: some View {
RealityView { content, attachments in
let entity = AnchorEntity(.image(group: "documentphoto", name: "Works2"))
if let text = attachments.entity(for: "Test") {
text.position = entity.position
entity.addChild(text)
}
content.add(entity)
} update: { content, attachments in
} attachments: {
Attachment(id: "Test"){
Text("Hello World")
.tag("Test")
}
}.task {
do {
try await session.run([imageInfo])
for await update in imageInfo.anchorUpdates {
updateImage(update.anchor)
}
} catch let error {
print("Error \(error.localizedDescription)")
}
}
}
}
extension ImmersiveView {
func updateImage(_ anchor: ImageAnchor) {
let refrenceImage = anchor.referenceImage.name
print("Reference Image tracked \(refrenceImage ?? "NO_IMAGE")")
}
}
A
RealityView
自动生成锚点(要在 RealityKit 中了解它们,请参阅为 Reality Composer 场景选择锚点)。但您不需要弄乱锚点来标记视图。
对于文本附件,请尝试以下操作:
var body: some View {
RealityView { content, attachments in
let material = SimpleMaterial(color: .red, isMetallic: true)
let model = ModelEntity(mesh: myMesh, materials: [material])
content.add(model)
if let attachment = attachments.entity(for: "name") {
attachment.position = [0, -0.4, 0]
content.add(attachment)
}
} attachments: {
Attachment(id: "name") {
Text("Name of scene")
.font(.extraLargeTitle)
}
}
}