AudioSourceとは?
AudioSourceは、AudioClipを再生するためのコンポーネントです。
GameObjectにアタッチして使用し、BGMや効果音、ボイスなどゲーム中のあらゆるサウンド再生で利用されます。
AudioSourceは単体では動作せず、シーン内にAudioListener(音を「聞く」側)が存在することで初めて音が鳴ります。
AudioListenerはデフォルトでMainCameraにアタッチされているので、特に意識しなくても再生はできるようになっています。
音の流れをざっくり整理すると、以下のようになります。
AudioClip… 再生する音データ(.wav, .mp3, .oggなど)AudioSource…AudioClipを再生する「スピーカー」AudioListener… 音を受け取る「耳」(通常はカメラに付与)
この3つの関係性を押さえておくと、後の3Dサウンドの話も理解しやすくなります。
使用するバージョン
本記事の動作確認にはUnity 6 (6000.0 LTS)を使用しています。
AudioSource自体はUnityの初期バージョンから存在する機能なので、Unity 2022.3 LTS以前の環境でも基本的な使い方はそのまま通用します。
AudioSourceの基本的な使い方
GameObjectへのアタッチ
AudioSourceは他のコンポーネントと同様に、InspectorのAdd Componentボタンから追加できます。
空のGameObjectを作成し、AudioカテゴリからAudio Sourceを選択しましょう。

また、Hierarchyの右クリックメニューからAudio→Audio Sourceを選んでもOKです。
Inspectorの主要項目
AudioSourceには多くの設定項目がありますが、まずは以下を押さえておけば十分です。
| 項目 | 説明 |
|---|---|
AudioClip / Audio Generator | 再生する音のデータ。プロジェクト内のオーディオファイルを指定する |
Output | 出力先のAudioMixerグループ。未指定の場合はそのまま出力される |
Play On Awake | チェックを入れるとGameObjectの有効化と同時に自動再生される |
Loop | チェックを入れると再生終了後に自動的に先頭から再生される |
Volume | 音量(0.0〜1.0)。1.0が原音、0.0で無音 |
Pitch | 再生速度・音程(-3.0〜3.0)。1.0が原音、2.0で2倍速、0.5で半分の速度になる |
Spatial Blend | 2D(平面的)と3D(立体的)のブレンド比率。0.0で完全2D、1.0で完全3D |
BGMのように常に同じ音量で流したい音はSpatial Blendを0(2D)に、足音や効果音など位置感のある音は1(3D)に設定するのが基本です。
スクリプトから再生する
Play On Awakeを使えばスクリプトを書かなくても再生できますが、ゲームの進行に合わせて鳴らしたい場合はスクリプトから操作します。
基本となるメソッドは以下の4つです。
using UnityEngine;
public class AudioSourceSample : MonoBehaviour
{
[SerializeField] private AudioSource _audioSource;
// 再生
public void PlaySound()
{
_audioSource.Play();
}
// 停止(先頭に戻る)
public void StopSound()
{
_audioSource.Stop();
}
// 一時停止
public void PauseSound()
{
_audioSource.Pause();
}
// 一時停止からの再開
public void ResumeSound()
{
_audioSource.UnPause();
}
}
StopとPauseの違いに注意してください。
Stopは再生位置を先頭にリセットしますが、Pauseは現在の位置を保持したまま止まります。
BGMのフェードアウト中や、ポーズ画面で一時的に止めたい場面ではPause/UnPauseの組み合わせが便利です。
Play と PlayOneShot の使い分け
効果音を扱う際によく出てくるのがPlayOneShotです。
Playとの違いを理解しておくと、攻撃音や決定音など短いSEを扱うときに役立ちます。
Play
PlayはAudioSourceに設定されたAudioClipを再生します。
同じAudioSourceに対して連続でPlayを呼ぶと、再生中の音は止まり、最初から再生し直されます。
_audioSource.clip = _seClip;
_audioSource.Play();
BGMのように「1つの音を1つのAudioSourceで鳴らし続ける」ケースに向いています。
PlayOneShot
PlayOneShotは、引数で渡したAudioClipを重ねて再生できるメソッドです。
連続で呼び出しても再生中の音は止まらず、複数の音が同時に鳴ります。
[SerializeField] private AudioSource _seSource;
[SerializeField] private AudioClip _attackClip;
private void OnAttack()
{
// 連打しても音が途切れず重なって鳴る
_seSource.PlayOneShot(_attackClip);
}
攻撃音、足音、UIの効果音など、短く何度も鳴る音に向いています。
第2引数で音量倍率も指定できます。
// 半分の音量で再生
_seSource.PlayOneShot(_attackClip, 0.5f);
使い分けのまとめ
| 用途 | おすすめ |
|---|---|
| BGM、ループする環境音 | Play(Loopにチェック) |
短いSE、UI音、効果音 | PlayOneShot |
| キャラクターのボイス(途中で割り込みたい) | Play(再生中なら止まる) |
3Dサウンドの設定
AudioSourceは2Dサウンド(位置に関係なく一定の音量で鳴る)と3Dサウンド(位置によって音量や定位が変わる)の両方に対応しています。
切り替えはSpatial Blendで行います。
Spatial Blend
Spatial Blendは0.0〜1.0の値で、2Dと3Dのブレンド比率を表します。
0.0… 完全な2Dサウンド(距離や向きに関係なく同じ音量で鳴る)1.0… 完全な3Dサウンド(距離・向きによって音量と定位が変化する)- 中間値 … 2Dと3Dをミックスした聞こえ方になる
BGMやUI音は0.0、ゲーム世界内で鳴る音(敵の足音、爆発音など)は1.0にするのが一般的です。
距離による減衰
3Dサウンドに設定すると、AudioListenerとの距離に応じて自動的に音量が減衰します。
3D Sound Settingsセクションを開くと、減衰に関する設定があります。

| 項目 | 説明 |
|---|---|
Min Distance | この距離より近い場所では最大音量で鳴る |
Max Distance | この距離より遠い場所では音量が一定(または無音)になる |
Volume Rolloff | 距離による減衰のカーブ。Logarithmic/Linear/Customから選択 |
Logarithmic Rolloffは現実の音の減衰に近い挙動で、近距離での変化が大きく、遠距離では緩やかに減衰します。
Linear RolloffはMin DistanceからMax Distanceの間で線形に減衰し、コントロールしやすいので、ゲーム的な調整がしやすい設定です。
立体音響の実装例
試しに、敵キャラクターから足音が鳴る仕組みを作ってみます。
using UnityEngine;
public class EnemyFootstep : MonoBehaviour
{
[SerializeField] private AudioSource _audioSource;
[SerializeField] private AudioClip _footstepClip;
[SerializeField] private float _interval = 0.5f;
private float _timer;
private void Start()
{
// 3Dサウンドとして鳴らす
_audioSource.spatialBlend = 1.0f;
_audioSource.rolloffMode = AudioRolloffMode.Logarithmic;
_audioSource.minDistance = 1.0f;
_audioSource.maxDistance = 15.0f;
}
private void Update()
{
_timer += Time.deltaTime;
// 一定間隔で足音を鳴らす
if (_timer >= _interval)
{
_timer = 0f;
_audioSource.PlayOneShot(_footstepClip);
}
}
}
このEnemyオブジェクトをAudioListener(カメラ)の周囲で動かすと、敵が近づくと足音が大きく、左右どちらにいるかも分かるようになります。
ステルスゲームやホラー系のゲームでは、この仕組みが緊張感を生む決め手になります。
複数のAudioSourceを使い分ける
ゲームを作っていくと、BGM・SE・UI音・ボイスなど、複数のサウンドを同時に扱う場面が増えます。
これを1つのAudioSourceで済ませようとすると破綻するため、用途ごとにAudioSourceを分けるのが定石です。
よくある構成例
例えば、シーンに以下のようなGameObjectを用意します。
SoundManager
├── BgmSource (AudioSource: Loop=true, Spatial Blend=0)
├── SeSource (AudioSource: Loop=false, Spatial Blend=0)
└── UiSource (AudioSource: Loop=false, Spatial Blend=0)
敵キャラの足音のように位置が重要な音は、敵GameObjectに個別のAudioSourceを持たせます。
スクリプトからの利用例
using UnityEngine;
public class SoundManager : MonoBehaviour
{
public static SoundManager Instance { get; private set; }
[SerializeField] private AudioSource _bgmSource;
[SerializeField] private AudioSource _seSource;
[SerializeField] private AudioSource _uiSource;
private void Awake()
{
Instance = this;
}
// BGMを再生
public void PlayBgm(AudioClip clip)
{
_bgmSource.clip = clip;
_bgmSource.Play();
}
// 効果音を重ねて再生
public void PlaySe(AudioClip clip)
{
_seSource.PlayOneShot(clip);
}
// UI音を再生
public void PlayUi(AudioClip clip)
{
_uiSource.PlayOneShot(clip);
}
}
なお、シーンをまたいで使い続ける場合はDontDestroyOnLoadと二重生成防止の処理が別途必要です。
呼び出し側はシンプルになります。
// 攻撃時のSEを鳴らす
SoundManager.Instance.PlaySe(_attackClip);
こうしておくと、後から「BGMだけ音量を半分にしたい」「UI音だけミュートしたい」といった調整も、対象のAudioSourceのvolumeを変えるだけで済みます。
AudioMixerでさらに本格的に
用途別にAudioSourceを分けたら、次のステップとしてAudioMixerを導入するのがおすすめです。
AudioMixerは複数のAudioSourceの出力をグループ化し、音量・エフェクト・ダッキングなどを一元管理できる仕組みです。
オプション画面で「BGM音量」「SE音量」を個別にスライダーで調整するような機能も、AudioMixerを使えばスマートに実装できます。
具体的な手順はAudioMixerでサウンドオプションを実装する記事にまとめているので、AudioSourceの基本がつかめたら覗いてみてください。
気をつける点
PlayOneShotとLoopは併用できない
PlayOneShotで鳴らした音は、AudioSourceのLoop設定の影響を受けません。
「ループする効果音をPlayOneShotで鳴らそうとしたけど1回しか鳴らない」というのはよくあるハマりどころです。
ループさせたい音は、clipをセットしてPlayで再生しましょう。
// NG: PlayOneShotではLoopにならない
_audioSource.loop = true;
_audioSource.PlayOneShot(_loopClip);
// OK: PlayならLoop設定が効く
_audioSource.clip = _loopClip;
_audioSource.loop = true;
_audioSource.Play();
PlayOneShotで鳴らした音は途中で止めにくい
Stopメソッドは、Playで再生中のclipは止めますが、PlayOneShotで重ね再生した音は止まりません。これは結構ハマりやすいポイントです。
途中で止めたい音がある場合は、専用のAudioSourceを用意してPlayで再生するようにしておくと安心です。
isPlayingで再生中かを判定する
現在再生中かどうかはisPlayingプロパティで取得できます。
if (!_audioSource.isPlaying)
{
_audioSource.Play();
}
ただしPlayOneShotで鳴らした音はisPlayingに反映されないことがあるので、PlayOneShotの判定用途では使わないようにしましょう。
同時再生数の上限
UnityのAudioSourceは、プラットフォームやハードウェアによって同時再生できる音の数に上限があります。
大量の効果音を一度に鳴らすとプチプチ途切れることがあるので、優先度(Priority)を設定したり、不要な音は止めるなどの工夫をしておくと安心です。
まとめ
今回はAudioSourceの入門として、基本的な再生方法から3Dサウンド、複数AudioSourceを組み合わせた構成までを紹介しました。
押さえておきたいポイントは以下のとおりです。
AudioSourceはAudioClipを再生するコンポーネントで、AudioListenerとセットで動くPlayはBGMやループ音向け、PlayOneShotは短いSE向け- 3Dサウンドにしたい場合は
Spatial Blendを1.0にし、Min/Max DistanceとVolume Rolloffを調整 - BGM・SE・UI音は用途ごとに
AudioSourceを分けると管理が楽になる - さらに踏み込んで音量調整やエフェクト管理をしたいなら
AudioMixerへ
まずはPlay On AwakeとLoopを使った簡単な再生から試して、慣れてきたらスクリプト制御や3Dサウンドへ広げていくのがおすすめです。
音を入れるだけでゲームの完成度はぐっと上がるので、AudioSourceをうまく活用してみてください。





