目标:我有一个巨大的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
中的所有实体默认都有名称。
因此,必须为实体提供所有必需的名称才能使用此方法。