Language:
  • 英語 (米国)
  • 日本語
more 

[Unity] PlayOneShot は音の同時発生に注意すべし

Unity5でサウンド周りが大幅に改善されるようですが、まだしばらく先でしょうし現行のUnity4.xのサウンド周りについて。

同じソースのサウンドが重なる状況の場合、つまり弾の発射音や爆発音といった効果音、いわゆるSEの再生にはAudioSource.PlayOneShotを使うと思います。が、PlayOneShotの特徴である”同じソースの音を重ねられる”という部分に、知っておいてほしい落とし穴があります。

端的に言えばほぼ同時のタイミングで同じ音が複数重なるとひどい雑音になるということです。

簡単に重ねられるのが利点なのに、重ねると雑音に?意味不明ですね。でもそうなんです。3つや4つ程度ならいいのですが、数十同時に鳴る場合ひどいことになります。

詳しい原因と解決法のひとつを提示してくださってるサイトさんがありますので、根本から知りたい方はあとでじっくりそちらを参照してください。

○×つくろーどっとコム:SEの同時発生数問題を考えてみる

とりあえず上記リンクページを開いたちょい下にあるサイン波重ね合わせテストというのを実際触って頂ければわかりますが、サウンド1つのときは「ポーッ」という丸みを帯びた感じの音なのですが、10~30~100と重なるごとに音量が大きくなり、さらに何か耳障りな音に変化してしまっています。

上記ページ冒頭で
>STGでボムを使って画面内にいる100体のザコ敵を「同じフレーム」で爽快に破壊したとしましょう。この時、もしザコ敵に爆発SEを仕込んでいたとすると、同じフレームで同時にその爆発SEが100個分重なって鳴る事になります。これ、どうなるかというと、PCにもよりますが、「ギャギガガガガ!!!」という爆発音とは到底思えないような酷い音が鳴ります。
と実際起こりそうな例を挙げられていますが、私がこの現象に気づいたのはアクションゲームで自分についてくるオプション(グラディウスのあれに近い挙動)が壁に反射する弾を撃つようなオブジェクトを作ったときで、こいつの弾発射位置が壁ポリゴン表面に埋まって弾を発射した際に同時に複数点で反射判定が発生し反射音が一気に複数重なったためです。

自分の作ってるゲームではそんなにSEが重なるところないから、と思っていても、実際本当に絶対起こらないか全ての状況を把握するのは、複雑なゲームになるほど不可能に近いと思います。
しかも重なる数によっては、まあ仕方ないなどと言えないレベルの雑音になりかねないので始末が悪い。没入感を高めるために大音量ヘッドホンでゲームをしてるような人が唐突にこれを食らったら…。ブラクラに近いね。

で、上記サイトさんでは発生した音の数に応じて音量等を丸める処理をした結果も示して下さってますが、今度は複数重なってる割に何か物足りない感じがしてしまったり。この辺は私的な無い物ねだりかもしれませんが。

というわけで、私はUnity5でサウンド周りの仕様変更でこれが改善されるのを期待していますが、現在すでにゲーム作成が進んでいてUnity4.xでPlayOneShotを使わざるを得ない方は、少なくともできるだけ雑音テロを引き起こさないよう配慮したほうがよいかと思います。