Unity PR

【Unity】BGMやSEを再生する方法

記事内に商品プロモーションを含む場合があります

この記事では、UnityでBGMやSEなどの音を鳴らす方法を解説します。

BGMを流すことで場の緊張感や楽しげな雰囲気を醸し出すことができ、SEを鳴らすことで爽快感やリアリティさを演出することができます。

Tips
  • BGM = Background Music(バックグラウンドミュージック)、背景音楽
  • SE = Sound Effects(サウンド・エフェクト)、音響効果

音を鳴らす基本

まずはゲーム内で音を鳴らすのに必要なコンポーネントやデータを確認していきましょう。

オーディオデータ AudioClip

Unity で使用するオーディオファイルは「AudioClip(オーディオクリップ)」と呼ばれています。このデータを次に紹介する AudioSourceコンポーネントに渡してサウンドを再生します。

LinkAudioClip - Unity スクリプトリファレンス

アセットストアやフリーサイトなどでダウンロードして音源を用意しましょう!

インポートできるオーディオファイル形式は「.aif、.wav、.mp3、.ogg」です。

音を再生する AudioSourceコンポーネント

音を鳴らすには AudioSourceコンポーネントを使います。

LinkAudioSource - Unity スクリプトリファレンス

音を鳴らしたいオブジェクトに AudioSourceコンポーネントをアタッチし、ゲーム開始時に再生させたり、スクリプトから再生することができます。

BGM、 SEのどちらも AudioSourcコンポーネントを用いて再生します。

音を聞く AudioListenerコンポーネント

AudioSourceコンポーネントで音を再生しただけではプレイヤーはその音を聞くことができません。プレイヤーの耳である AudioListenerコンポーネントが必要となります。

LinkAudioListener - Unity スクリプトリファレンス

AudioListenerコンポーネントはデフォルトでメインカメラにアタッチされています。

  • AudioListenerは複数設定することは推奨されていない

音を鳴らしてみる

それでは、実際に音を鳴らしてみましょう!

まずは適当なプロジェクトを作成し、その中に空オブジェクトを作成してください。作成したらそのオブジェクトに AudioSourceコンポーネントをアタッチします。

次に、AudioSourceコンポーネントのインスペクター上でオーディオクリップを設定します。ちなみに、今回はアセットストアにある「8Bit Music - 062022」を使わしてもらいました。

【Unity】アセットストアにあるアセットを追加・使用する方法この記事では、Unityのアセットストア(Asset Store)からアセットを追加し、プロジェクト内で使用する方法を解説します。ゲームにはたくさんの部品が必要になりますが、全てを1から作るとかなりの時間を要してしまいます。そんな時には、アセットを使うことで時短にもなり、クオリティも高くなることが多いです。...

そしたら、「PlayOnAwake(ゲーム開始時に再生)」にチェックが入っているか確認し、ゲームを再生してみてください。

これで渡したオーディオクリップが再生されました。

BGM

BGMを再生する場合は、「Loop(ループ)」にチェックをし、「SpatialBlend(立体音響ブレンド)」を「0」にします。

Loop ループ再生するかどうか
SpatialBlend 3D立体化の計算(減衰やドップラーなど)によってどのくらい影響を受けるか設定します。 「0.0」は音を完全に「2D」にし、「1.0」は完全に「3D」になる

BGMをループ再生し、位置関係によってボリュームが変わらないように設定できます。

スクリプトからBGMを再生する

スクリプトからBGMを再生するには、AudioSourcePlay()を呼び出します。

using UnityEngine;

public class Sound : MonoBehaviour
{
    private AudioSource audioSource;

    void Start()
    {
        // AudioSource コンポーネントの取得
        audioSource = GetComponent<AudioSource>();
        
        // 再生
        audioSource.Play();
    }
}

LinkAudioSource-Play - Unity スクリプトリファレンス

曲を変更する

途中で曲を変更したい場合は、AudioSourceClipを変更してから再生するだけです。

using UnityEngine;

public class Sound : MonoBehaviour
{
    private AudioSource audioSource;

    // 複数のBGMを受け取っておく
    [SerializeField]
    private AudioClip[] clips;

    void Start()
    {
        // AudioSource コンポーネントの取得
        audioSource = GetComponent<AudioSource>();
        
        // 曲の変更(clipsからランダムに選ばれる)
        audioSource.clip = clips[Random.Range(0, clips.Length)];

        // 再生
        audioSource.Play();
    }
}

LinkAudioSource-clip - Unity スクリプトリファレンス

BGMを途切らせない

シーンを遷移する際にオブジェクトが削除されてしまうのでBGMが途切れてしまう。つまりは削除されないようにすればBGMは途切れることがなくなります。

シーンを遷移しても削除されないようにするにはDontDestroyOnLoad()を使います。

using UnityEngine;

public class Sound : MonoBehaviour
{
    void Start()
    {
                // 引数に指定したオブジェクトを削除されないように設定できる
        DontDestroyOnLoad(this);
    }
}

SE

SEを再生する場合は、AudioSorce の設定を以下のように変更します。

  • オーディオクリップは設定しておかない
  • 「Loop(ループ)」と「PlayOnAwake(ゲーム開始時に再生)」のチェックを外す
  • 「SpatialBlend(立体音響ブレンド)」は状況によって変更する

そしたら以下のようなスクリプトを作成し、アタッチしてください。

using UnityEngine;

public class Sound : MonoBehaviour
{
    private AudioSource audioSource;

    // SEを受け取っておく
    [SerializeField]
    private AudioClip se;

    void Start()
    {
        // AudioSource コンポーネントの取得
        audioSource = GetComponent<AudioSource>();
    }

    private void Update() 
    {
        // 左クリックした場合
        if(Input.GetMouseButtonUp(0))
        {
            // 引数のクリップを再生
            audioSource.PlayOneShot(se);
        }
    }
}

後はインスペクター上で再生したSEを渡しておきます。

ゲームを実行し、左クリックを押してみてください。
SEが再生されたと思います。

ポイントはSEの再生にはPlayOneShot()を使うことです。BGMの再生に使うPlay()と違って重ねて再生することができます。

LinkAudioSource-PlayOneShot - Unity スクリプトリファレンス

まとめ

この記事では、BGMやSEなどの音を鳴らす方法を解説しました。

サウンドがないゲームはとても寂しいものになってしまいます。なので、適切にBGMやSEを流して楽しいゲームにしちゃいましょう!

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ