Да, вы можете.
Если вы хотите знать, как использовать SceneKit positional audio
прочтите этот пост .
Если вы используете RealityKit positional audio
в вашем приложении - прочтите этот пост .
Давайте посмотрим, как ваш код может выглядеть для lazy var
:
lazy var geoAndAudioNode: SCNNode = {
guard let scene: SCNScene = SCNScene(named: "pixar.usdz"),
let node: SCNNode = scene.rootNode.childNode(withName: "model",
recursively: true)
else { return SCNNode() }
let myPath = Bundle.main.path(forResource: "audio", ofType: "mp3")
let myURL = URL(fileURLWithPath: myPath!)
let mySource = SCNAudioSource(url: myURL)!
let audioNode = SCNNode()
let player = SCNAudioPlayer(source: mySource)
node.addChildNode(audioNode)
audioNode.addAudioPlayer(player)
return node
}()
А вот как ваш код может выглядеть внутри renderer
метода:
extension ViewController: ARSCNViewDelegate {
func renderer(_ renderer: SCNSceneRenderer,
didAdd node: SCNNode,
for anchor: ARAnchor) {
guard let imageAnchor = anchor as? ARImageAnchor,
let imageName = imageAnchor.referenceImage.name
else { return }
let geometryNode = retrieveNode(name: imageName)
node.addChildNode(geometryNode)
}
func retrieveNode(name: String) -> SCNNode {
var node = SCNNode()
switch name {
case "geoAndAudioImage": node = geoAndAudioNode
default: break
}
return node
}
}