'How can I replace a ModelEntity in RealityKit?

I want to switch the ModelEntity from the fvBoatAnchor.fvBoatObject to the fvBridgeAnchor.fvBridgeObject with the click of a button, but I'm not sure how I do it, while also keeping the gestures and collisions as well as the image tracker after changing the entity.

Here is my code

import UIKit
import RealityKit
import ARKit

class fvVessel: UIViewController, ARSessionDelegate {
    
    @IBOutlet var arView: ARView!
    
    @IBOutlet weak var imageView: UIImageView!
    
    let fvBoatAnchor = try! FV.loadFvBoatScene()
    let fvBridgeAnchor = try! FV.loadFvBridgeScene()
    
            var imageAnchorToEntity: [ARImageAnchor: AnchorEntity] = [:]
    
        override func viewDidLoad() {
                super.viewDidLoad()
                    let fvBoat = fvBoatAnchor.fvBoatObject as? Entity & HasCollision
                    arView.installGestures(for: fvBoat!)
                    
                    fvBoatAnchor.generateCollisionShapes(recursive: true)
                        arView.scene.addAnchor(fvBoatAnchor)
                        arView.session.delegate = self
                }
           
        func session(_ session: ARSession, didAdd anchors: [ARAnchor]) {
            anchors.compactMap { $0 as? ARImageAnchor }.forEach {
                let anchorEntity = AnchorEntity()
                let modelEntity = fvBoatAnchor.fvBoatObject!
                anchorEntity.addChild(modelEntity)
                arView.scene.addAnchor(anchorEntity)
                anchorEntity.transform.matrix = $0.transform
                imageAnchorToEntity[$0] = anchorEntity
                
                imageView.isHidden = true
                
            }
            
        }
    
//    func session(_ session: ARSession, didUpdate anchors: [ARAnchor]) {
//        anchors.compactMap { $0 as? ARImageAnchor }.forEach {
//            let anchorEntity = imageAnchorToEntity[$0]
//            anchorEntity?.transform.matrix = $0.transform
//        }
//    }

    func installGestures(on object:ModelEntity){
        
        object.generateCollisionShapes(recursive: true)
        arView.installGestures(.all, for: object)
    }
    
     func leaveScene() {

        arView?.session.pause()
        arView?.session.delegate = nil
        arView?.scene.anchors.removeAll()
        arView?.removeFromSuperview()
        arView?.window?.resignKey()
        arView = nil
     }

    @IBAction func leaveScene(_ sender: UIButton) {
        leaveScene()
    }
}


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source