如果您需要将实体加载到场景中,您必须创建一个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.rcproject 和 Matrix.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 模型: