我试图让SceneKit在我的角色每次移动时播放一个脚步声。当他们靠近(播放器)时,音频的音量应该会增加。
以下是我设置音频源的方式:
private lazy var stepAudioSource:SCNAudioSource = {
let tempAudioSource = SCNAudioSource(fileNamed: "art.scnassets/Audio/step_enemy.wav")!
tempAudioSource.volume = 0.3
tempAudioSource.rate = 0.1
tempAudioSource.loops = true
tempAudioSource.shouldStream = false
tempAudioSource.isPositional = true
return tempAudioSource
}()
为了播放音频,我首先尝试使用playAudioSource,为动作提供一个键,并尝试在角色每次停止时删除它。不幸的是,即使删除该操作似乎也不会停止音频播放,所以我改为:
private var isWalking:Bool = false {
didSet{
if oldValue != isWalking {
if isWalking{
addAnimation(runAnimation, forKey: "run")
let sfxPlayer = SCNAudioPlayer(source: stepAudioSource)
characterNode.addAudioPlayer(sfxPlayer)
}else{
removeAnimation(forKey: "run", blendOutDuration: 0.2)
removeAllAudioPlayers()
}
}
}
}
音频文件是单声道的,因为我发现位置音频与双声道音频不兼容。shouldStream属性设置为false。
这在大多数情况下确实有效。不幸的是,如果节点开始时离播放器太远,足迹音频将无法开始播放,当它们真正靠近时,将听不到任何声音。我做错了什么?