Tengo un archivo (existe en el paquete principal con la membresía de destino marcada) llamado matrix.usdz y necesito cargarlo con
do { let path = Bundle.main.path(forResource: "Matrix", ofType: "usdz")! let url = URL(fileURLWithPath: path) let assetsLoader = try Entity.load(contentsOf: url) } catch { print(error) }Pero choca con
Hilo 1: señal SIGABRT
en esta linea
let assetsLoader = try Entity.load(contentsOf: url)Avance
Tienes que crear un ancla si necesitas cargar una entidad en tu escena. Para obtener un ModelEntity, debe tomarlo de la jerarquía de la escena usando .children[X] .
import RealityKit class ViewController: UIViewController { @IBOutlet var arView: ARView! override func viewDidLoad() { super.viewDidLoad() do { let path = Bundle.main.path(forResource: "Matrix", ofType: "usdz")! let url = URL(fileURLWithPath: path) // Scene let scene = try Entity.load(contentsOf: url) print(scene) // Entity let entity = scene.children[0].........children[0] as! ModelEntity entity.model?.materials[0] = UnlitMaterial(color: .red) let anchor = AnchorEntity(plane: .any) anchor.addChild(scene) arView.scene.anchors.append(anchor) } catch { print(error) } } }También puede obtener un modelo de esta manera:
let modelEntity = try Entity.loadModel(contentsOf: url) modelEntity.model?.materials[0] = UnlitMaterial(color: .red) Debo decir que tiene un error de nombre obvio: "Matrix" vs "matrix". Además Matrix.rcproject y Matrix.usdz no son lo mismo. Para cargar Matrix.rcproject (proyecto Reality Composer), utilice el siguiente enfoque:
// .rcproject let scene = try! Matrix.loadCircle() let circleEntity = scene.children[0]...........children[0] as! ModelEntitypara cargar un modelo USDZ usa este:
// .usdz let model = try! Entity.loadModel(named: "Matrix", in: nil)Pero que yo sepa, no necesita un proyecto RC, así que exporte USDZ desde Reality Composer.
Para cargar el archivo .reality utilice el siguiente enfoque:
// .reality let carModel = try! Entity.loadAnchor(named: "car") print(carModel) arView.scene.addAnchor(carModel)