Я пытаюсь заставить 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.
Это работает в большинстве случаев.К сожалению, если узел начинается слишком далеко от плеера, звук шага не начнет воспроизводиться, и когда он действительно приблизится, звук не будет слышен.Что я делаю не так?