Это должно работать:
var scene: SCNScene!
if let filePath = Bundle.main.path(forResource: "Helicopter",
ofType: "usdz",
inDirectory: "art.scnassets") {
let refURL = URL(fileURLWithPath: filePath)
let mdlAsset = MDLAsset(url: refURL)
scene = SCNScene(mdlAsset: mdlAsset)
}
SCNReferenceNode
работает только для файлов .scn.Затем вы можете получить геометрию из дочернего узла rootNode
из scene
.
let helicopterNode = scene.rootNode.childNode(withName: "helicopter", recursively: true)
let geometry = helicopterNode.geometry!
Редактировать
Используя один из файлов из AR Quick Look Gallery Мне удалось заставить этот код работать.Основная проблема, с которой я столкнулся, заключалась в названии конкретного дочернего узла, который назывался «RetroTV», но к нему не была привязана какая-либо геометрия, он был просто родителем для «RetroTVBody» и «RetroTVScreen».Единственная проблема заключается в том, что он не загружает текстуры для геометрии.
var scene: SCNScene!
if let filePath = Bundle.main.path(forResource: "retrotv",
ofType: "usdz",
inDirectory: "art.scnassets") {
let refURL = URL(fileURLWithPath: filePath)
let mdlAsset = MDLAsset(url: refURL)
scene = SCNScene(mdlAsset: mdlAsset)
let tvNode = scene.rootNode.childNode(withName: "RetroTVBody", recursively: true)
let geometry = tvNode!.geometry!
} else {
print("invalid path!")
}
Приведенный выше код также работает с объявлениями tvNode
и geometry
вне оператора if let
.