一つの音声を同時に複数再生する

ページ更新日 :
ページ作成日 :

検証環境

Windows
  • Windows 11
Unity エディター
  • 2021.3.3f1
入力システムパッケージ
  • 1.3.0

この Tips の前提設定

この Tips の説明の前提として以下の設定を事前に行っています。

サンプルに付属している素材について

以下のサイト様より効果音を借用しています。

音声ファイルについて

Unity の標準機能で再生できる音声ファイルの形式は以下のようなものがあります。本 Tips で使用するので事前に用意しておいてください。

  • WAV (.wav)
  • OggVorbis (.ogg)
  • MPEG layer 3 (.mp3)

詳しくは Unity 公式のマニュアルを参照してください。

音声の複数同時再生について

前回の Tips では AudioSource を使用して音声ファイルを再生していましたが、単一の音しか出せず複数の音を出そうとしても前の音は消えてしまいました。 例えばゲームにおいて2つの爆発を起こした際に2つ目の爆発で効果音を発生させたときに1つ目の効果音が消えてしまうのは不自然です。 ここでは同じ音を複数重ねて再生できる方法について説明します。

音声の複数同時再生の手順

ここでは新規プロジェクトを作成したところから説明してますが、それなりに Unity を知っている方ならば該当箇所だけ切り抜いて覚えてもらっても問題ありません。

今回はボタンをクリックするたびに効果音を再生するようにします。UI を図のように作成してください。細かいところは適当でいいです。

プロジェクトにサウンドファイルをドロップして追加します。

ヒエラルキーに「オーディオ ソース」を追加します。今回は AudioSource に直接オーディオクリップは設定しません。

スクリプトを追加します。名前は ButtonEvent としておきます。

スクリプトは以下のようにします。

using UnityEngine;

public class ButtonEvent : MonoBehaviour
{
  [SerializeField] private AudioSource AudioSource;

  /// <summary>音声データ。</summary>
  [SerializeField] private AudioClip AudioClip;

  public void OnClickPlay()
  {
    // オーディオを再生します
    AudioSource.PlayOneShot(AudioClip);
  }
}

AudioSource は前の Tips と同様音声を制御するためのクラスだと思ってください。

AudioClip は音声データを格納するクラスです。ここに音声ファイルなどをセットすることができます。

AudioSource.PlayOneShot メソッドに AudioClip を引数で渡すとその音声データを再生することができます。 このメソッドで再生された音声は独立して制御されるので、 もう一度このメソッドを呼んだ場合は前の音声とは別に新たな音声として再生されます。 そのためこのメソッドを呼ぶたびに重ねて音声を再生することができるようになっています。

作成したスクリプトは EventSystem にアタッチします。

「オーディオソース」にはヒエラルキーに追加した「Audio Source」をセットします。

「オーディオクリップ」にはプロジェクトから音声ファイルをセットします。

最後にボタンのクリックイベントにメソッドをセットします。

ゲームを実行してボタンをクリックしてください。効果音が再生されると思います。 また、再生中にもう一度ボタンをクリックすれば前の音が消えずに新しい音が再生されると思います。

このように AudioClip を経由して音声を再生することにより同じ音を重ねて再生できるようになりました。 これでゲームでも不自然に前の音が消えずに再生することができます。

AudioClip を使用して再生したときのデメリット

AudioClip を使用して再生することによって音声を重ねて再生することができましたが、逆に以下のデメリットが発生します。

音がうるさくなる

連続してボタンをクリックしてみると分かりますが、音が重なって再生される分音がどんどん大きくなってしまいます。 例えばゲームで攻撃がヒットするときに効果音を再生する場合、 なんの対策もせずに同時に多段ヒットが発生すると異常な音量で再生されてしまう場合があります。