Unity

【Unity】AudioSourceの使い方|BGM・SE・フェード処理・PlayOneShot

この記事について

UnityでのBGMや効果音(SE)の扱い方を解説します。AudioSourceとAudioClipの基本から、音量調整やループ設定、フェード処理まで、ゲームに欠かせないサウンド演出をまとめました。さらに、複数の効果音を効率よく管理する方法やパフォーマンス最適化のポイントも紹介します。

この記事でわかること

  • BGM・SEの基本的な再生方法(AudioSource / AudioClip)
  • 音量の変更・ループ設定・フェード処理
  • 効果音をスクリプトで制御する方法
  • サウンド管理の最適化(オーディオプール・負荷軽減)

AudioSourceとは?

Unityの AudioSource とは、ゲーム内で音を再生するためのコンポーネントです。
スピーカーの役割を持っていて、音声データ(AudioClip)を実際に「鳴らす」機能を担当します。たとえばBGM、効果音、環境音などを流したいときは、AudioSourceをGameObjectにアタッチして使います。

主な特徴

  • AudioClipを指定して再生
    AudioSourceにAudioClipを割り当てると、その音声を再生できます。スクリプトから動的に差し替えることも可能です。
  • ループ再生
    BGMのように同じ音を繰り返したい場合は loop をオンにするだけでループ再生されます。
  • 音量・ピッチ調整
    volume で音量、pitch で再生速度や高さを変えることができます。
  • 3Dサウンド
    空間に配置して、リスナー(通常はカメラ)の位置によって音の聞こえ方が変わるようにできます。距離による減衰やステレオのパン効果も適用されます。

UnityのAudioSourceの使い方

AudioSourceとAudioClipの関係

Unityでは、AudioSource(音を再生する)とAudioClip(音のデータ)を組み合わせてサウンドを管理します。

➡ AudioClipはAssets/Audio/などに保存!(フォルダは作成しましょう)
➡ AudioSource にAudioClipを追加してサウンドを再生!

項目役割
Audio Source音を再生・停止・ループするコンポーネント
AudioClip音のデータ(WAV、MP3、OGGなど)

AudioSourceの追加方法

① Hierarchy から追加

・ [Hierarchie] → [右クリック] → [Audio] → [Audio Source] を選択
・ AudioSourceオブジェクトがシーンに追加される

AudioSourceの構成要素(ミュート、ループ、音量・音程)

設定項目説明主な用途
AudioClip (Audio Resource)再生する音声ファイル(WAV, MP3, OGG など)を設定効果音やBGMの割り当て
OutputAudio Mixer(音量やエフェクトを一括管理する仕組み)に接続複数の音をグループで制御したいとき
Muteサウンドを一時的に消音する特定の条件で音を無効化
Bypass EffectsAudio Mixer のエフェクト(リバーブやEQなど)を無効化する特定の音だけエフェクトを外したいとき
Bypass Listener EffectsAudio Listener 側に適用される効果を無効化する特殊な演出でリスナー影響を受けたくないとき
Bypass Reverb ZonesReverb Zone(環境リバーブ)の影響を無効化するリバーブを適用しない音を作りたいとき
Play On Awakeシーン開始時に自動で再生するゲーム開始時にBGMを流すとき
Loopチェックを入れると繰り返し再生するBGMや環境音に利用
Priority音の優先度(0=最優先、256=最低)多数の音が鳴る場合、優先度の高い音を残す
Volume音量を調整(0.0~1.0)音の大きさを制御
Pitch再生速度・音程を調整(0.1~3.0)高音・低音やスロー/早回し再生
Stereo Pan-1(左)~+1(右)で音の定位を設定ステレオ音声で方向を付けたいとき
Spatial Blend0=2D、1=3Dとして扱う割合を調整2Dゲームなら0、3Dゲームなら1推奨
Reverb Zone Mixリバーブゾーンの影響度(0~1.1)洞窟やホールの音響効果を強調
Doppler Level移動による音の変化(ドップラー効果)を適用車や飛行機など動きの速い音にリアルさを追加
Spreadステレオの広がり(0~360度)を調整音の拡がり感を制御
Volume Rolloff距離による音量減衰カーブを選択(Logarithmic / Linear / Custom)3D音の減衰方法を制御
Min Distanceこの距離までは音量が最大のままになる近距離での音量維持
Max Distanceこの距離を超えると音が聞こえなくなる音が届く範囲を制御

AudioSourceのスクリプト制御

BGMを再生・停止・一時停止・再開

スクリプトで制御すれば、BGMの切り替えが簡単に!
※ AudioSourceのAudio ResourceにAudioClipをアタッチしてください

using UnityEngine;

public class BGMExample : MonoBehaviour
{
    public AudioSource audioSource;

    //BGMを開始
    void BGMStart()
    {
        audioSource.Play();
    }
    //BGMを停止
    void BGMStop()
    {
        audioSource.Stop();
    }
    //BGMを一時停止
    void BGMPause()
    {
        audioSource.Pause();
    }
    //BGMを再開
    void BGMUnPause()
    {
        audioSource.UnPause();
    }
}

SE(効果音)を再生

効果音をスクリプトで再生

効果音には「PlayOneShot()」を使うと、他の音と重ねて再生可能!

public AudioSource audioSource;
public AudioClip jumpSE;

void Update()
{
    //「Space」キーを押すとSEが流れる
    if (Input.GetKeyDown(KeyCode.Space))
    {
        audioSource.PlayOneShot(jumpSE);
    }
}

AudioMixerでマスター・BGM・SE音量を管理

Unityではグループ毎の音量をまとめて管理できる機能があります。AudioMixerについては以下の記事を参考にしてください。

BGMのフェードイン・フェードアウト

フェードイン

最初に音量0から、徐々にBGMを再生します!

IEnumerator FadeInBGM(AudioSource source, float duration)
{
    float time = 0;
    while (time < duration)
    {
        source.volume = Mathf.Lerp(0, 1, time / duration);
        time += Time.deltaTime;
        yield return null;
    }
    source.volume = 1;
}

フェードアウト

BGMをスムーズに演出に最適!

IEnumerator FadeOutBGM(AudioSource source, float duration)
{
    float time = 0;
    float startVolume = source.volume;

    while (time < duration)
    {
        source.volume = Mathf.Lerp(startVolume, 0, time / duration);
        time += Time.deltaTime;
        yield return null;
    }
    source.Stop();
    source.volume = startVolume;
}

サウンドの最適化

音声ファイルの圧縮

・ MP3 / OGGを使うとファイルサイズを削減できる!
・ WAVは高いですが、サイズが大きいので注意してください!

AudioSourceを減らしてパフォーマンス向上

・ BGM用はAudioSource1つだけする!
・ SEはPlayOneShot()使って複数再生!

サウンドオブジェクトをプールする

Instantiate()/Destroy()は負荷が大きいため、オブジェクトプールを活用します。
この方法は有効性が不明なため参考程度にお願いします。

オブジェクトプールを活用すると、サウンド再生の負荷を軽減できる!

using System.Collections.Generic;
using UnityEngine;

public class AudioPool : MonoBehaviour
{
    public AudioSource audioPrefab;
    private Queue<AudioSource> pool = new Queue<AudioSource>();

    public AudioSource GetAudioSource()
    {
        if (pool.Count > 0)
        {
            AudioSource source = pool.Dequeue();
            source.gameObject.SetActive(true);
            return source;
        }
        return Instantiate(audioPrefab);
    }

    public void ReturnAudioSource(AudioSource source)
    {
        source.gameObject.SetActive(false);
        pool.Enqueue(source);
    }
}

まとめ

・ AudioSource+AudioClipを使えば簡単にBGMやSEを再生できる!
・ BGMはloop = true、SEはPlayOneShot()を活用!
・フェード処理を実現すれば、スムーズなBGM切り替えが可能!
・オーディオの最適化(ファイル圧縮・プーリング)で負荷を軽減!