【问题标题】:RealityKit – Get a model entity from USDZ fileRealityKit – 从 USDZ 文件中获取模型实体
【发布时间】:2022-05-15 15:45:26
【问题描述】:

我有一个名为 matrix.usdz 的文件(存在于主包中,并检查了目标成员资格),需要加载它

 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)
  }

但它崩溃了

线程 1:信号 SIGABRT

在这条线上

let assetsLoader = try Entity.load(contentsOf: url)

预览

【问题讨论】:

    标签: swift augmented-reality realitykit usdz reality-composer


    【解决方案1】:

    如果您需要将实体加载到场景中,您必须创建一个anchor。为了得到一个ModelEntity,你需要使用.children[X]下标从场景hierarchy抓取它。

    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)
             }
        }
    }
    

    您也可以通过这种方式获取模型:

    let modelEntity = try Entity.loadModel(contentsOf: url)
                        
    modelEntity.model?.materials[0] = UnlitMaterial(color: .red)
    


    附言

    我应该说你有一个明显的命名错误——“矩阵”与“矩阵”。 Matrix.rcprojectMatrix.usdz 也不一样。要加载Matrix.rcproject(Reality Composer 项目),请使用以下方法:

    // .rcproject
    let scene = try! Matrix.loadCircle()
    
    let circleEntity = scene.children[0]...........children[0] as! ModelEntity
    

    要加载 USDZ 模型,请使用这个:

    // .usdz
    let model = try! Entity.loadModel(named: "Matrix", in: nil)
    

    但据我所知,你不需要 RC 项目,所以从 Reality Composer 导出 USDZ。

    要加载.reality 文件,请使用以下方法:

    // .reality
    let carModel = try! Entity.loadAnchor(named: "car")
    print(carModel)
    
    arView.scene.addAnchor(carModel)
    


    这是您在 iOS 模拟器上的 USDZ 模型:

    【讨论】:

    猜你喜欢
    • 2021-07-14
    • 1970-01-01
    • 2021-09-25
    • 2020-12-17
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 2021-09-17
    • 2011-07-19
    相关资源
    最近更新 更多