スポンサーリンク
Unity入門・基礎

【Unity】AudioSource完全ガイド|音の再生・停止・ループ・効果音実装まで解説

Unity入門・基礎

「Unityで音を鳴らしたいのに、何から手をつければいいのかわからない」——そんなふうに感じていませんか。AudioSourceという言葉は知っていても、実際に何を設定すれば音が出るのか、迷ってしまう人は少なくありません。

この記事では、AudioSourceの基本設定からスクリプトでの再生方法、効果音を自然に鳴らすコツ、3Dサウンドの実装、そして音が鳴らないときのチェックポイントまで、Unityのサウンド実装を一通り解説していきます。まずは、音を鳴らすために最低限必要な仕組みから見ていきましょう。


Unityで音を鳴らす3要素と最短手順

結論からお伝えすると、Unityで音を鳴らすには「AudioClip」「AudioSource」「AudioListener」という3つの要素が揃っていればOKです。この3つはそれぞれ役割が違っていて、どれか1つでも欠けると音は聞こえません。

難しく感じるかもしれませんが、実はとてもシンプルな仕組みです。順番に見ていきましょう。

AudioClip・AudioSource・AudioListenerの関係

この3つは「音源」「再生装置」「耳」という関係にたとえるとイメージしやすくなります。AudioClipが音そのもののデータで、CDや音楽ファイルのようなものです。ただしAudioClip単体では音を鳴らせません。

そこで登場するのがAudioSourceです。ゲームオブジェクトにアタッチすることで、そのオブジェクトの場所から音を再生できるようになります。いわばスピーカーの役割ですね。そして最後に必要なのがAudioListener。発生した音を受け取ってプレイヤーに届ける「耳」の役割で、通常はMain Cameraに最初からアタッチされています。

ワンポイント

「AudioSourceをたくさん付ければ音質が良くなるのでは」と思う方もいますが、それは誤解です。AudioSourceを増やすのは音質のためではなく、BGMと効果音を別々に管理しやすくするためのものです。

音声ファイルのインポートから再生確認までの手順

仕組みがわかったところで、実際にプロジェクトへ音を取り込んで鳴らしてみましょう。手順自体はそれほど多くありません。

  1. PC上の音声ファイル(WAV、MP3、Oggなど)を、Unityの「Project」ウィンドウのAssetsフォルダ以下にドラッグ&ドロップして取り込みます。
  2. 取り込んだアセットが「AudioClip」として認識されているか確認します。
  3. 上部メニューの「GameObject」→「Audio」→「Audio Source」を選択し、Scene上にAudio Sourceオブジェクトを作成します。すでにあるオブジェクトに追加したい場合は、Inspectorの「Add Component」から「Audio Source」を検索して追加してもかまいません。
  4. 作成したオブジェクトのAudio Sourceコンポーネントにある「Audio Clip」の欄へ、先ほどインポートした音声ファイルをドラッグ&ドロップで割り当てます。

ここまでできたら、「Play On Awake」にチェックが入っていることを確認して、画面上部のPlayボタンを押してみてください。自動で音が鳴れば設定は完了です。もし鳴らない場合は、記事の後半で紹介するチェックリストを参考にしてみてくださいね。

基本的な音の追加方法をもう少し丁寧に確認したい場合は、こちらの記事も参考になります。




Play()とPlayOneShot()どちらを使うか

音を鳴らすスクリプトを書こうとしたとき、多くの人が最初につまずくのがこのポイントです。結論からいうと、BGMのような1つの音を管理したいときはPlay()、効果音のように重ねて鳴らしたいときはPlayOneShot()を使うのが基本になります。

名前が似ているせいで「どっちも同じようなものでしょ」と思われがちですが、実はできることがかなり違います。ここを混同したまま実装を進めると、「効果音が連打できない」「BGMの音量だけ調整できない」といった困りごとにつながるので、先に違いを整理しておきましょう。

コード例(GetComponentでの取得〜再生)

まずは共通の下準備として、スクリプトから自分のAudioSourceを取得するところから始めます。同じゲームオブジェクトにアタッチされたAudioSourceは、GetComponentで取得できます。

using UnityEngine;

public class SoundController : MonoBehaviour
{
    private AudioSource audioSource;

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

この状態を用意できたら、あとは目的に合わせてメソッドを呼び分けるだけです。BGMのように「1曲を最初から再生したい」場合は、Play()を使います。

void PlayBGM()
{
    audioSource.Play();
}

一方、ジャンプ音やクリック音のように「短い音を何度も重ねて鳴らしたい」場合は、PlayOneShot()の出番です。引数として鳴らしたいAudioClipを直接渡せるのが特徴です。

using UnityEngine;

public class PlayerSound : MonoBehaviour
{
    private AudioSource audioSource;
    public AudioClip jumpSE; // Inspectorからアサインする

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

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            audioSource.PlayOneShot(jumpSE);
        }
    }
}

この2つの違いを表にまとめると、次のようになります。自分が今作ろうとしている音がどちらに当てはまるか、照らし合わせながら確認してみてください。

項目Play()PlayOneShot()
音の重複再生不可(再生中の音は強制的に頭出しされる)可能(同じ音でも重ねて再生できる)
Clipの指定方法AudioSourceに事前アタッチが必要メソッド実行時に引数として指定
音量の個別指定不可(AudioSourceの音量に従う)可能(第2引数で音量を調整できる)
適した用途BGM・ループする環境音・長い音楽ジャンプ音・攻撃音・ボタンクリックなどの短いSE

ワンポイント

迷ったときは「この音は1つだけ鳴っていればいいか、重なって鳴っても違和感がないか」で考えると判断しやすくなります。前者ならPlay()、後者ならPlayOneShot()が向いています。




Stop()とPause()の使い分け

音を止めるだけなら、Stop()でもPause()でもどちらでも良さそうに感じるかもしれません。ですが、この2つは再開したときの位置が根本的に違うため、場面によって使い分けが必要です。

Stop()は再生を完全に止めるメソッドで、次にPlay()を呼び出すと音源の最初(0秒地点)から再生されます。ステージのクリア時やゲームオーバー時など、「もう一度鳴らすときは頭からでいい」という場面に向いています。

一方のPause()は、再生を途中の位置で一時停止するメソッドです。再開するときはUnPause()を呼び出すことで、止めた位置から続きが流れます。ポーズメニューを開いたときのように、「さっきの続きから聞きたい」という場面ではPause()のほうが自然な挙動になります。

// 一時停止する
void PauseSound()
{
    audioSource.Pause();
}

// 一時停止した位置から再開する
void ResumeSound()
{
    audioSource.UnPause();
}

どちらを使うべきか迷ったときは、次の表で自分の場面と照らし合わせてみてください。

項目Stop()Pause()
再生を止める可能可能
再生再開時の位置音源の最初から(頭出し再生)一時停止された位置から
再開用のメソッドPlay()UnPause()
適した用途ゲームオーバー・ステージ切り替え時などポーズ画面・一時的な処理停止時など

特にポーズ機能を実装しているときにStop()を使ってしまうと、再開のたびにBGMが頭に戻ってしまい、不自然な体験になりがちです。

ポーズ中の音楽を扱うときは、Pause()とUnPause()の組み合わせを選んでおくと安心です。




効果音を自然に鳴らす3つの実践テクニック

基本の再生方法がわかったところで、次は「実際にゲームで使うとどうなるか」という視点でのテクニックを紹介します。ここで紹介する3つは、実装しているとつまずきやすいポイントばかりなので、ひとつずつ押さえていきましょう。

オブジェクト消滅時もPlayClipAtPointで音を途切れさせない

敵を倒したときやアイテムを取得したときに、Destroy(gameObject);でオブジェクトを消す処理はよく使われます。ですが、この処理をそのまま使うと、アタッチされているAudioSourceも一緒に消えてしまい、効果音が途中で不自然に途切れてしまうことがあります。

この問題を避けるために使えるのが、AudioSource.PlayClipAtPointです。指定した座標に一時的な再生用オブジェクトを自動で作り、そこで音を鳴らしてくれます。

public AudioClip explosionSE;

void OnDestroy()
{
    AudioSource.PlayClipAtPoint(explosionSE, transform.position);
}

敵の撃破音やアイテムの獲得音など、「消える瞬間に鳴らしたい音」がある場合は、この方法を選んでおくと安心です。

Pitchのランダム化で機械的な連打音を防ぐ

同じ効果音を何度も連続で鳴らすと、機械的で単調な印象になってしまうことがあります。特に足音や打撃音のように連続して発生する音は、この違和感が目立ちやすい傾向にあります。

そこで役立つのが、再生のたびにピッチを少しだけランダムに変える方法です。わずかな変化を加えるだけで、耳への印象がぐっと自然になります。

void PlayRandomPitchSE(AudioClip clip)
{
    // ピッチを0.95倍〜1.05倍でランダムに変更
    audioSource.pitch = Random.Range(0.95f, 1.05f);
    audioSource.PlayOneShot(clip);
}

BGM用とSE用でAudioSourceを分ける

1つのAudioSourceでBGMと効果音の両方をまかなおうとすると、「BGMだけをミュートしたい」「効果音の音量だけ下げたい」といった調整がとても難しくなります。役割ごとにAudioSourceを分けておくのが、あとから困らないための基本の考え方です。

目安としては、BGM用に1つ(ループ再生・Play On Awakeを有効化)、SE用に1つ以上(PlayOneShotでの重複再生に特化)という構成です。シーンをまたいでもBGMを止めたくない場合の実装例は、こちらの記事で詳しく解説しています。

とはいえ、BGMとSEの管理を自分でイチから設計するのは、プロジェクトが大きくなるほど手間がかかります。管理をシンプルにしたい場合は、専用のアセットに頼るのも選択肢のひとつです。

より高機能な管理を求める場合は、こちらの有料アセットも検討してみてください。


3Dサウンドの距離減衰を実装する方法

プレイヤーがオブジェクトに近づくと音が大きくなり、離れると聞こえなくなる——このような「距離による音量変化」を実装したい場合は、3Dサウンドの設定が必要になります。ただし、すべての音を3D化する必要はありません。

判断の目安はシンプルで、位置情報が意味を持つ音は3D、画面全体に響く音は2Dのままで問題ありません。足音や爆発音、キャラクターの声などは3Dサウンドが向いていますが、BGMやメニュー画面のクリック音、通知音のように「どこで鳴っても同じ音量でいい音」は、2Dのままにしておくほうが自然に聞こえます。

Min Distance・Max Distanceの設定

3Dサウンドにするには、まず対象のAudio SourceコンポーネントでSpatial Blendの値を「1」(3D側の端)に変更します。この設定によって、距離や方向によって音量・定位が変化するようになります。

3D化したあとは、3D Sound Settingsの中にある次の項目を調整していきます。

  • Min Distance:音量が最大のまま維持される最小距離です。この距離より外側に出ると、音の減衰が始まります。
  • Max Distance:音量の減衰が止まる最大距離です。ここより離れても、それ以上小さくはなりません。

この2つの数値を調整することで、「どこまで近づけば音が最大になるか」「どこまで離れれば聞こえなくなるか」をゲームの規模に合わせて設定できます。

Rolloff Modeの設定

音がどのように小さくなっていくかを決めるのが、Rolloff Modeです。選ぶモードによって、聞こえ方の印象がかなり変わります。

  • Logarithmic Rolloff:近づくと急激に音量が大きくなり、少し離れるだけで急激に小さくなります。現実の音の聞こえ方に近い変化です。
  • Linear Rolloff:距離に対して直線的に音量が変化します。一定のペースで小さくなっていくイメージです。
  • Custom Rolloff:カーブをエディタ上で直接ドラッグして、独自の減衰カーブを作成できます。

どれを選べばいいか迷う場合は、まずLogarithmic Rolloffで試してみて、実際にプレイしながら違和感がないかを確認するのがおすすめです。

数値だけで判断するより、実際に耳で聞いて調整するほうが、ゲームに合った自然な聞こえ方に近づきやすくなります。




音が鳴らない時の原因チェックリスト

設定したはずなのに音が聞こえない——これはUnityでサウンドを実装しているとよく起こるつまずきです。原因はいくつかのパターンに絞られるので、上から順番にチェックしていけば、たいてい解決できます。

次の項目を、実際のプロジェクトと照らし合わせながら確認してみてください。

  • ✅ シーン内(通常はMain Camera)にAudio Listenerコンポーネントが1つだけアタッチされているか。存在しない場合、音は一切聞こえません。
  • ✅ Audio Sourceの「Audio Clip」の欄が「None」のままになっていないか。
  • ✅ Audio Sourceの「Volume」が「0」になっていないか、または「Mute」にチェックが入っていないか。
  • ✅ 3D設定(Spatial Blend = 1)にしている場合、Audio ListenerとAudio Sourceの距離が離れすぎていないか(Max Distanceを超えていないか)。
  • ✅ 音を鳴らそうとした直後に、そのオブジェクトやAudio Source自体がDestroyされていないか。

特に見落としやすいのが、Audio Listenerの重複です。Audio Listenerはシーン内に1つだけという決まりがあるため、複数のカメラにそれぞれアタッチされていると、警告が出たり音の挙動がおかしくなったりすることがあります。

3D設定にしているときは、まず一時的にSpatial Blendを「0」(2D)に戻して鳴るかどうかを試すと、距離の問題なのか別の原因なのかを切り分けやすくなります。

ここまでのチェックで解決しない場合、「鳴らない」のではなく「タイミングがズレて聞こえる」というケースかもしれません。その場合は、こちらの記事もあわせて確認してみてください。




まとめ

音の実装は、Play()とPlayOneShot()の違いを理解するだけで、迷う場面がぐっと減ります。BGMのように1つを管理したいのか、効果音のように重ねて鳴らしたいのか——まずはその判断から始めてみてください。

3Dサウンドや管理方法は、必要になったタイミングで少しずつ取り入れていけば十分です。次はサウンドと合わせて、プレイヤー操作の実装にも取り組んでみると、ゲーム全体の完成度がさらに上がっていきます。


よくある質問

Q
Audio Mixerは使ったほうがいいですか?
A
必須ではありません。基本のAudio Sourceとスクリプト制御ができていれば、ゲームは十分に作れます。ただし、設定画面から全体のBGM・SE音量をまとめて調整したくなったタイミングでは、Audio Mixerの導入を検討する価値があります。
Q
WebGLビルドで音が再生されないのはなぜですか?
A
ブラウザ側の自動再生ポリシーによって、ユーザーが一度もページを操作していない状態では音声の自動再生がブロックされることがあります。この場合はUnity側の実装ミスではないため、ボタンクリックなどユーザー操作をきっかけに再生を開始する仕組みにすると解決しやすくなります。
Q
iPhoneのマナーモードで音が聞こえないのはなぜですか?
A
これはUnity側の実装の問題ではなく、iOSの消音スイッチ(サイレントスイッチ)による仕様です。アプリの音声設定によって挙動が変わる場合もあるため、実機でマナーモードを解除した状態でも確認しておくと、切り分けがしやすくなります。

※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。

※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。

スポンサーリンク