RealityKit–按名称从USDZ文件中抓取子项



目标:我有一个巨大的USDZ场景文件,有数百个层和对象。需要轻松抓取每个对象,然后在RealityKit中进行操作。

已尝试:Andy Jazz的方法是我目前找到的唯一解决方案:

let entity = scene.children[0].........children[0] as! ModelEntity

问题:不可能知道层次结构上每个USDZ的实体编号。

是否可以通过实体的名称获取实体?

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

使用findEntity(named:)实例方法按名称递归获取任何子实体。

func findEntity(named name: String) -> Entity?

.rcproject场景

let boxAnchor = try! Experience.loadBox()
arView.scene.anchors.append(boxAnchor)
print(boxAnchor)

let entity = boxAnchor.findEntity(named: "Steel Box")
entity?.scale *= 7

.usdz模型

let model = try! ModelEntity.load(named: "model.usdz")
let anchor = AnchorEntity(world: [0,0,-1])
anchor.addChild(model)
arView.scene.anchors.append(anchor)

print(model)

let entity = model.findEntity(named: "teapot")
entity?.scale /= 33

p。S.

遗憾的是,并非.usdz.rcproject中的所有实体默认都有名称。

因此,必须为实体提供所有必需的名称才能使用此方法。

相关内容

  • 没有找到相关文章

最新更新