检测到参考图像时用于播放音频的惰性变量

Lazy var for playing audio when reference image is detected

我想播放参考图像中的单个音频文件。

我会使用 lazy var 加载音频文件然后使用

func getNode(withImageName name: String) 

触发播放哪个音频?

可以。

如果您想知道如何使用 SceneKit positional audio,请阅读

如果您在应用中使用 RealityKit positional audio – 请阅读 this post


让我们看看您的代码在 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
    }
}