Swiftui 从RealityKit中的场景中删除实体

Swiftui 从RealityKit中的场景中删除实体,swiftui,entity,augmented-reality,realitykit,Swiftui,Entity,Augmented Reality,Realitykit,我想从场景中删除一个实体 我在UpdateUIView函数中创建了如下实体: // create anchor and model-Entity let anchor = AnchorEntity(plane: .horizontal) let cube = MeshResource.generateBox(size: 0.1, cornerRadius: 0.03) let material = SimpleMaterial(color: .gray, roughness: 0.2,

我想从场景中删除一个实体

我在UpdateUIView函数中创建了如下实体:

// create anchor and model-Entity
let anchor = AnchorEntity(plane: .horizontal)
    
let cube = MeshResource.generateBox(size: 0.1, cornerRadius: 0.03)
let material = SimpleMaterial(color: .gray, roughness: 0.2, isMetallic: true)
let cubeEntity = ModelEntity(mesh: cube, materials: [material])
    
anchor.addChild(cubeEntity)
uiView.scene.addAnchor(anchor)
现在我想通过在我的用户界面中按下一个按钮来删除它。通过按下按钮,我将var从false更改为true。 然后我在UpdateUIView函数中写道:

if remove == true {
    uiView.scene.removeAnchor(anchor)
}
当我按下按钮时,它会将布尔值更改为true,但实体不会消失

关于如何解决这个问题有什么建议吗?

UpdateUI(…) 使用以下代码获得所需的结果:

import SwiftUI
import RealityKit

struct ARViewContainer: UIViewRepresentable {
    
    @Binding var showed: Bool
    let anchor = AnchorEntity(world: [0, 0,-1])
    
    func makeUIView(context: Context) -> ARView {      
        let arView = ARView(frame: .zero)
        let cube = MeshResource.generateBox(size: 0.8, cornerRadius: 0.02)
        let material = SimpleMaterial(color: .red, isMetallic: true)
        let cubeEntity = ModelEntity(mesh: cube, materials: [material])
        anchor.addChild(cubeEntity)
        arView.scene.addAnchor(anchor)
        return arView
    }        
    func updateUIView(_ uiView: ARView, context: Context) {
        if showed == true {
            uiView.scene.removeAnchor(anchor)
        }
    }
}

struct ContentView : View {
    
    @State private var show = false

    var body: some View {
        VStack {
            ARViewContainer(showed: $show)
            VStack {
                Button(action: { self.show.toggle() }) {
                    Text("Remove Model")
                }
            }
        }
    }
}    
协调员
更新
updateiview(…)
instance方法中的内容不是必须的。相反,您可以将类与自定义的
makeCoordinator()
方法一起使用。

Hi@User\u 404,这种差异很重要,不是吗<代码>makeUIView(…)方法创建视图对象并配置其初始状态。然后,
updateUIView(…)
方法只是更新了之前创建的内容。嘿,安迪,你的方法有效,但我尝试加载多个.USDZ文件并用你的方法删除它们。这不起作用。每次按下特定模型的按钮以创建新实体时,我都会更改实体的名称。但是removeAnchor函数不再删除任何这些实体。对此有何建议?您可以使用
.name
实例属性命名锚定或模型。然后只需使用
arView.scene.findEntity(名为:“NAME”)
Thx来找到它,安迪。到目前为止,我在显示代码的地方发布了另一个问题。也许你可以看看这个,告诉我我的问题在哪里。我是swift的新手,不理解代码中发生的一切。我明天会看一看。)