我正在try 创建一个函数来暂停AR会话,同时清除我的字典变量entityDictionaries
并删除所有锚点.然而,我有点被困住了,不知道如何开始.
以下是我的主视图的代码:
struct InitiateARView: View {
@StateObject var vm = ARPreparationViewModel()
var body: some View {
VStack {
if vm.isLoading {
Button("Start", action: {
vm.prepareAR()
})
} else {
ZStack {
ARExperience()
.edgesIgnoringSafeArea(.all)
VStack {
HStack {
Spacer()
Button("Stop AR", action: {
// Call to clear AR session function here
})
}
Spacer()
}
}
}
}
}
}
下面是我的ARExperience struct 的简化版本
struct ARExperience: UIViewRepresentable {
var arView = ARView(frame: .zero)
var entityDictionaries = [String: (anchor: AnchorEntity, model: ModelEntity)]()
func makeCoordinator() -> Coordinator {
Coordinator(parent: self)
}
class Coordinator: NSObject, ARSessionDelegate {
var parent: ARExperience
init(parent: ARExperience) {
self.parent = parent
}
func session(_ session: ARSession, didAdd anchors: [ARAnchor]) {
guard let validAnchor = anchors[0] as? ARImageAnchor else { return }
let anchor = AnchorEntity(anchor: validAnchor)
let videoPlane = createdVideoPlayerNodeFor(validAnchor.referenceImage)
anchor.addChild(videoPlane)
parent.arView.scene.addAnchor(anchor)
if let targetName = validAnchor.referenceImage.name {
parent.entityDictionaries[targetName] = (anchor, videoPlane)
}
}
func session(_ session: ARSession, didUpdate anchors: [ARAnchor]) {
}
}
func makeUIView(context: Context) -> ARView {
//...
}
func updateUIView(_ uiView: ARView, context: Context) {
}
}
任何能让我摆脱这个问题的帮助都将是完美的