WWDC 2017 の SceneKit サンプル Fox 2 を調べる その27
GameController クラスのセットアップ関数を見てゆく。
今回は音を設定しているオーディオ設定。
playSound(_ audioName: AudioSourceKind)
AudioSourceKind の enum で指定されているオーディオソースの添字を playSound 関数に渡す。
指定した添字から音を audioSources の配列から探し、 SCNAudioPlayer をシーンに addAudioPlayer で追加するし音を再生する。
func playSound(_ audioName: AudioSourceKind) {
scene!.rootNode.addAudioPlayer(SCNAudioPlayer(source: audioSources[audioName.rawValue]))
}
setupAudio()
BGM や SE の音を設定する。
- ここで設定している node に rootNode を渡す
- audioSource に ambience.mp3 を渡し、BGM として再生する
- volcanoNode に particles_volcanoSmoke_v2 の名前のノードを渡し、audioSource として volcano.mp3 を設定する。isPositional の設定をしていないため位置によって音が変化する。
- collect.mp3、collectBig.mp3、unlockTheDoor.m4a、hitEnemy.wav を audioSources として audioSources の配列に入れ、各種設定する。
func setupAudio() {
let node = scene!.rootNode
if let audioSource = SCNAudioSource(named: "audio/ambience.mp3") {
audioSource.loops = true
audioSource.volume = 0.8
audioSource.isPositional = false
audioSource.shouldStream = true
node.addAudioPlayer(SCNAudioPlayer(source: audioSource))
}
if let volcanoNode = scene!.rootNode.childNode(withName: "particles_volcanoSmoke_v2", recursively: true) {
if let audioSource = SCNAudioSource(named: "audio/volcano.mp3") {
audioSource.loops = true
audioSource.volume = 5.0
volcanoNode.addAudioPlayer(SCNAudioPlayer(source: audioSource))
}
}
audioSources[AudioSourceKind.collect.rawValue] = SCNAudioSource(named: "audio/collect.mp3")!
audioSources[AudioSourceKind.collectBig.rawValue] = SCNAudioSource(named: "audio/collectBig.mp3")!
audioSources[AudioSourceKind.unlockDoor.rawValue] = SCNAudioSource(named: "audio/unlockTheDoor.m4a")!
audioSources[AudioSourceKind.hitEnemy.rawValue] = SCNAudioSource(named: "audio/hitEnemy.wav")!
audioSources[AudioSourceKind.unlockDoor.rawValue].isPositional = false
audioSources[AudioSourceKind.collect.rawValue].isPositional = false
audioSources[AudioSourceKind.collectBig.rawValue].isPositional = false
audioSources[AudioSourceKind.hitEnemy.rawValue].isPositional = false
audioSources[AudioSourceKind.unlockDoor.rawValue].volume = 0.5
audioSources[AudioSourceKind.collect.rawValue].volume = 4.0
audioSources[AudioSourceKind.collectBig.rawValue].volume = 4.0
}
次回は GameController クラスのイニシャライズの関数を見てゆく。