加算シーンを読み込むと、なぜかFeelで再生しているサウンドが止まるという謎現象で試行錯誤していたのだが、 大人しくソースを追ったら、すぐに原因がわかった。

原因は、SceneManager.sceneLoaded に登録される OnSceneLoaded() で呼ばれる、FreeAllSoundsButPersistent() である。

本来、シーン切り替え時の自動開放を意図して作られているようだが、これが加算シーンの読み込みでも発動してしまう。
そして、厄介なことに、MMFeedback Player 自体は継続しており、この関数の呼び出しで無効になるのは、Pool内のAudioオブジェクトのみだ。
そのため、ヒエラルキーをチェックしてゆくと、一見再生が継続しているように見えるが音は止まっているという謎現象に見えてしまう。
(MMSoundManagerの子オブジェクトのMMAudioPoolの配下のAudio Componentのリストを監視すると、非アクティブに落ちているのがわかる。)

回避方法としては、本体のソースをいじるか、MMSound の Persistent オプションに忘れずにチェックを入れる。

今回はMMSoundManagerの話だったが、意外にAssetStoreで購入したもので SceneManager.sceneLoaded にフックして何かしてくるものは多い。 加算シーンで意図しない挙動をした時には、このことを思い出して対応したい。

Previous Post

LoadSceneMode.Additive と MMSoundManagerの罠