【Unity】Unityオーディオ入門:BGM、SE、3Dサウンドを実装する

作成: 2025-12-07最終更新: 2026-07-13

映像は完成しているのに、遊ぶとどこか安っぽい——足りないのは音です。Audio Source/Listenerの基本、BGMとSE(PlayOneShot)の定石実装、Spatial Blendによる2D/3Dサウンドの使い分け、Audio Mixerによる音量設定まで解説します。

グラフィックは整った。動きも良い。でも遊んでみると、なぜか安っぽい——ボタンを押しても無音、攻撃が当たっても無音。ゲームの手応えの半分は、実はが作っています。

Unityのオーディオは、3つの登場人物で覚えれば十分です。

  1. Audio Clip: 音声ファイルそのもの(.wav・.mp3・.oggなど)
  2. Audio Source: 音を鳴らすスピーカー(シーン内に何個でも)
  3. Audio Listener: 音を聞くマイク(シーンに1つだけ・通常はメインカメラに最初から付いています)
Unityオーディオのイメージ。スピーカーから音符が流れ、カメラに付いたマイクがそれを聞いている。キャラクターの足元からは足音の波紋が広がっている

この記事でわかること

  • オーディオの3要素——Clip・Source(スピーカー)・Listener(マイク)
  • BGMのループ再生とSEの定石(PlayOneShot
  • Spatial Blend——2Dサウンドと3Dサウンドの使い分け
  • Audio Mixerで「BGM音量」「SE音量」のスライダーを作る入口
  • 実践:背後から迫る敵の足音を組む

Sponsored
オーディオの3つの登場人物。Audio Clip=音声ファイル、Audio Source=鳴らすスピーカー、Audio Listener=聞くマイク(シーンに1つだけ)

BGM(背景音楽)の再生

BGMは「シーン開始と同時に鳴り始めて、ループし続ける」が基本形です。スクリプトは不要です。

  1. 空のGameObjectを作成し、「BGMManager」などと名付けます。
  2. Audio Sourceコンポーネントを追加し、以下を設定します。
プロパティ設定意味
AudioClipBGMのファイル再生する曲
Play On Awakeオンシーン開始と同時に再生
Loopオン曲の終わりで最初に戻る
Spatial Blend0(2D)どこにいても同じ音量で聞こえる

tips シーンをまたいでBGMを流し続けたい場合は、DontDestroyOnLoad と組み合わせます。「シーン遷移のたびにBGMが頭から鳴り直す」問題の定番解です。

SE(効果音)の再生

SEは「イベントが起きた瞬間に1回だけ鳴る」音です。定石は PlayOneShot() ——現在再生中の音を止めずに重ねて再生できるため、連打・連続ヒットでも音が途切れません。

BGMとSEの違いの図。左のBGMはPlay On AwakeとLoopで曲がループし続ける(2Dで常に同じ音量)、右のSEはPlayOneShotでイベントの瞬間ごとに短い音を重ねて鳴らすため、連打でも音が途切れない
  1. SEを鳴らしたいオブジェクトにAudio Sourceを追加し、Play On AwakeLoopオフにします。
  2. スクリプトからPlayOneShot()を呼びます。
using UnityEngine;

[RequireComponent(typeof(AudioSource))]
public class PlayerAudio : MonoBehaviour
{
    public AudioClip jumpSound;
    public AudioClip hitSound;

    private AudioSource audioSource;

    void Awake()
    {
        audioSource = GetComponent<AudioSource>();
    }

    public void PlayJump()
    {
        // 第2引数で個別に音量を調整できる
        audioSource.PlayOneShot(jumpSound, 0.8f);
    }

    public void PlayHit()
    {
        audioSource.PlayOneShot(hitSound);
    }
}

その場に音を残したいとき——PlayClipAtPoint

「爆発した敵は消えるが、爆発音はその場所で鳴り続けてほしい」——音源のオブジェクトが消えてしまう場合は、標準の静的メソッドAudioSource.PlayClipAtPoint()が便利です。

void OnDestroyed()
{
    // 指定位置に一時的なAudioSourceを自動生成して再生し、終わったら自動で消える
    AudioSource.PlayClipAtPoint(explosionSound, transform.position);
    Destroy(gameObject);
}

内部では一時的なGameObjectの生成・破棄が起きるため、毎フレーム級の高頻度SEには向きません(その場合は プール したAudio Sourceを使います)。「たまに鳴る、その場に残したい音」用と覚えてください。

Sponsored

3DサウンドとSpatial Blend

Audio SourceSpatial Blend は、「音に位置があるか」を決めるスライダーです。

Spatial Blendの図。左は2Dサウンドでキャラクターがどこにいてもスピーカーから同じ音量、右は3Dサウンドで音源に近いと大きく遠いと小さく聞こえ、左右の方向もわかる
  • 0(2D): カメラの位置に関係なく、常に同じ音量・同じバランスで聞こえます。BGM・UI音に。
  • 1(3D): 音がシーン内のAudio Sourceの位置から発生しているように聞こえます。近づけば大きく、遠ざかれば小さく、左にあれば左から。敵の足音・爆発・環境音に。

使い分けの判断基準は1行です。 「その音に『場所』があるなら3D、ないなら2D」。3D側はMin Distance/Max DistanceVolume Rolloffカーブで、「どこまで届く音か」を調整できます。

ここで1つ、誤解しやすい仕様があります。デフォルトの Logarithmic Rolloffでは、Max Distanceは「無音になる距離」ではなく「減衰が止まる距離」 です。Max Distanceを越えても、小さくなった音量のまま聞こえ続けます。一方 Linear RolloffはMax Distanceでちょうど音量0 になります。「一定距離で完全に聞こえなくしたい」ならLinearかカスタムカーブを選びましょう。Sceneで音源の周りを実際に歩いて、2つのRolloffの聞こえ方を比べてみるのがいちばん早い理解法です。

Audio Mixer——音量設定の土台

設定画面の「BGM音量」「SE音量」スライダーは、Audio Mixerで作るのが定石です。

Audio Mixerの図。複数のAudio SourceがOutput設定でBGMグループとSEグループに振り分けられ、Masterへ合流する。各グループのVolumeをExposeすると、スクリプトからスライダーで音量を調整できる
  1. 「Window > Audio > Audio Mixer」でミキサーを作成し、BGMSEグループを追加します。
  2. Audio SourceOutputに対応するグループを設定します。これで音が「BGM系統」「SE系統」に分かれて流れます。
  3. グループのVolumeを右クリック →「Expose」でスクリプトから操作可能にし、audioMixer.SetFloat("BGMVolume", dB値)で変更します。

tips ミキサーの音量はデシベル(-80〜0) で、スライダーの0〜1をそのまま渡すと正しく効きません。Mathf.Log10(value) * 20で変換するのが定番イディオムです。音量スライダーの保存とUIの組み立ては PlayerPrefs入門の実践 が丸ごと1本の題材にしています。

実践:背後から迫る敵の足音を組む

ステルスゲームで背後から近づく警備兵、ホラーで廊下の向こうから迫る何か、サバイバルで夜の闇をうろつく獣—— 「見えないけれど、音で分かる」 は3Dサウンドの独壇場です。この記事の部品(3D設定+PlayOneShot+ピッチランダム化)だけで組めます。

敵の足音の3Dサウンドの図。プレイヤーの背後にいる敵の足元から音の波紋が広がり、プレイヤーの右後ろから聞こえるため、振り向かなくても方向と距離がわかる

Audio Sourceの設定(敵にアタッチ):

プロパティ設定ねらい
Spatial Blend1(3D)敵の位置から聞こえる
Min Distance2この距離までは最大音量
Max Distance15ここで減衰が止まる(≒気配の届く範囲)
Volume RolloffLogarithmic近づくほど急に大きく(緊張感)

補足: Logarithmicでは、Max Distanceの外でも小さな音がかすかに残ります。「範囲外は完全な無音」にしたい場合は、Volume RolloffをLinearに変えるか、カスタムカーブで終端を0に落としてください。

// EnemyFootsteps.cs(敵にアタッチ)
using UnityEngine;

[RequireComponent(typeof(AudioSource))]
public class EnemyFootsteps : MonoBehaviour
{
    [SerializeField] private AudioClip[] footstepClips; // 数種類用意する
    [SerializeField] private float stepInterval = 0.5f; // 歩調

    private AudioSource audioSource;
    private float stepTimer;

    void Awake()
    {
        audioSource = GetComponent<AudioSource>();
    }

    void Update()
    {
        stepTimer += Time.deltaTime;
        if (stepTimer >= stepInterval)
        {
            stepTimer = 0f;
            PlayFootstep();
        }
    }

    private void PlayFootstep()
    {
        // 毎回違うクリップ+微妙に違うピッチで「機械っぽさ」を消す
        AudioClip clip = footstepClips[Random.Range(0, footstepClips.Length)];
        audioSource.pitch = Random.Range(0.95f, 1.05f);
        audioSource.PlayOneShot(clip);
    }
}

再生して敵に背を向けて立ってみてください。右後ろにいれば右のスピーカーから、遠ければ小さく聞こえます。プレイヤーは画面に映っていない敵の位置を、音だけで把握できるようになります。走るときはstepIntervalを短く、忍び足なら長く+音量を下げれば、敵のAIの状態が音に表れるようになり、ゲームの緊張感が一段深まります。

ポイントは2つです。 「Max Distanceは『気配が届く距離』としてゲームデザインで決める」(物理的な正しさより、プレイヤーに知らせたい距離で調整します)と、 「クリップ複数+ピッチランダムで反復感を消す」 こと。足音を鳴らすタイミングをアニメーションと同期させたい場合は、アニメーションイベント からPlayFootstep()を呼ぶ形に発展させます。

おまけ:先に知っておくと良いこと

  • Audio Listenerは1つだけ: シーンに2つあると警告が出ます。カメラを複数置いたときに起きがちなので、片方のListenerを無効化してください。
  • 同時再生数には上限がある: 標準では同時に鳴らせる実音声(ボイス)は32個です。弾幕ゲームでSEを撃ちすぎると古い音から消えます。優先度はAudio SourcePriorityで調整できます。
  • インポート設定でメモリが変わる: BGMのような長い曲はLoad Type: Streaming、短いSEはDecompress On Loadが定石です。モバイルでの詳細は モバイル最適化 を参照してください。
  • ピッチのランダム化: 同じSEを鳴らすときpitchを0.95〜1.05でランダムにすると、連続ヒット音の機械っぽさが消えます。1行でできる音の品質向上テクです。
  • 次の一歩は「状況で動くBGM」: Audio Mixerに慣れたら、動的BGM(スナップショット・ダッキング) で探索↔戦闘の切り替えや会話中のBGMダウンを組めます。ゲームの「らしさ」が大きく上がる発展テーマです。

まとめ

  • 登場人物は3人—— Clip(音)・Source(スピーカー)・Listener(マイク・シーンに1つ)
  • BGMはPlay On Awake+Loop+Spatial Blend 0。シーンまたぎはDontDestroyOnLoadと併用。
  • SEは PlayOneShot() が定石。消えるオブジェクトの音はAudioSource.PlayClipAtPoint()
  • 「場所がある音は3D、ない音は2D」 でSpatial Blendを使い分ける。
  • 3Dの Max Distanceは「気配が届く距離」 としてゲームデザインで決める。Logarithmicでは「減衰が止まる距離」であり、無音になる距離ではない。
  • 音量設定はAudio Mixerのグループ+Exposeで作る。

まずはボタン音とヒット音の2つを入れてみてください。それだけで「ゲームらしさ」が一段変わります。あなたのゲーム、目を閉じて遊んだら何が「聞こえて」きますか?