前書き
TopDown Engineに限らずですがUnityAssetから購入したものを動かしてみると、「おやっ?」っと思うような挙動をすることは多々あります。だいたいの場合はソースコードを追えば何とか見つけることができると思いますが、そもそもどうやって見つけてるのか?というところの参考になればいいかなと思います。
事象
以下の動画のように画面をPauseにすると”Sfx”の音量だけが-80(音量”0″)になってしまう事象が発生しました。いろいろ調べていくと意外なところに影響があることが分かりました。
原因と対処法
原因
プレイヤーがPauseボタンを押したときに「ゲームを止める」場合はプレイヤーに”CharacterPause”スクリプトを設定してあげる必要があります。
“CharacterPause”スクリプトを見ると「Pause audio tracks」という項目があります。”Koala”プレハブからコピーして作った場合、デフォルトで「Mute Sfx Track Sounds」にチェックが入っています。このチェックが入っていると「Pause中はSfxをMuteにする」という動作をします。
対処法
“CharacterPause”の「Mute Sfx Track Sounds」のチェックボックスを外すことでPause状態であってもSfxの音量が-80(音量無し)にはなりません。
# デフォルトでSfxのみTrueで、ほかのMasterやMusicはFalseなので、気になる方はチェックを外したほうがいいかもしれません。
今回の事象をどうやって見つけたか?
以下の順番でソースを見て行って該当箇所を見つけた形になります。
- Sfxの音量が急に”0″になるので、おそらくSoundManagerあたりが悪さをしているのだろうとあたりを付ける。
- Hierarchyにある”SoundManager”のMMSoundManager.csを疑う。
- MMSoundManager.csのソースを見ると”case MMSoundManagerTracks.Sfx“の時に音量を”0″にする処理分岐が見つかる。
- case MMSoundManagerTracks.Sfxを設定するところを全てソース検索する
- CharacterPause.csでMMSoundManagerTracks.Sfxを設定している処理が見つかる。
TopDown Engineのソースを見てみるとcase文で状態を判断しそれぞれのメソッドを実行していることが多いです。そのため、case文からソースの全検索をかけてみるとだいたいの実行している個所が割り出せるようになっていると感じます。
まとめ
今回は”CharacterPause”の一部処理について紹介しました。
音量周りの問題だったのでSoundManagerあたりに原因があったと思ったのですが、ソースを検索してみると意外なところに問題がありました。Documentなども豊富にありますが、原因を探るためにはどうしてもソースを理解する必要があるのかなと思います。
コメント