RealityKit-从USDZ文件中获取模型实体

本教程将介绍RealityKit-从USDZ文件中获取模型实体的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

RealityKit-从USDZ文件中获取模型实体 教程 第1张

问题描述

我有一个名为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:信号信号

此行

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

预览

推荐答案

如果需要将实体加载到场景中,则必须创建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)

P.S.

我应该说,您有一个明显的命名错误-&Matrix"vs"Matrix"。此外,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模型:

好了关于RealityKit-从USDZ文件中获取模型实体的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。